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));
        }
Ejemplo n.º 2
0
        public async Task <Stream> Handler(WorkerPublicInput input)
        {
            var queryInput = ConvertInput(input);

            var result = await _worker.QueryAsync(queryInput).ConfigureAwait(false);

            return(PublicResult.Serialize(result));
        }
Ejemplo n.º 3
0
        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));
        }