private async Task <Result> ExecuteAsync(WorkerPlan plan, Uri source) { var input = new WorkerPublicInput { UnderlyingQuery = plan.UnderlyingQuery.ToString(), Order = plan.Order.IsSome ? plan.Order.AsT0.ToString() : null, Limit = plan.Limit.IsSome ? plan.Limit.AsT0.ToString() : null, DataLocation = source }; var response = await _lambda.InvokeAsync(new InvokeRequest { FunctionName = _workerFunctionName, InvocationType = InvocationType.RequestResponse, Payload = JsonConvert.SerializeObject(input), }).ConfigureAwait(false); if (!string.IsNullOrEmpty(response.FunctionError)) { throw new WorkerException(response.FunctionError); } using var payload = response.Payload; return(await PublicResult.DeserializeAsync(payload).ConfigureAwait(false)); }
public async Task <Stream> Handler(WorkerPublicInput input) { var queryInput = ConvertInput(input); var result = await _worker.QueryAsync(queryInput).ConfigureAwait(false); return(PublicResult.Serialize(result)); }
private static WorkerInput ConvertInput(WorkerPublicInput input) { var underlyingQuery = Parse(Parser.Query, input.UnderlyingQuery); var order = string.IsNullOrEmpty(input.Order) ? (Option <OrderClause>) new None() : Parse(Parser.OrderByClause, input.Order); var limit = string.IsNullOrEmpty(input.Limit) ? (Option <LimitClause>) new None() : Parse(Parser.LimitClause, input.Limit); var plan = new WorkerPlan(underlyingQuery, order, limit); return(new WorkerInput(plan, input.DataLocation)); }