public async Task <Response> GetPage(ReadStreamOptions options, CancellationToken cancellationToken) { var operation = options.GetReadOperation(); var page = await operation.Invoke(_streamStore, cancellationToken); var payloads = await Task.WhenAll(page.Messages .Select(message => options.EmbedPayload ? message.GetJsonData(cancellationToken) : Task.FromResult <string>(null)) .ToArray()); return(new Response( new HALResponse(new object()) .AddLinks(StreamLinks.Self(options)) .AddLinks(StreamLinks.Navigation(page, options.Self)) .AddLinks(StreamLinks.Feed(page)) .AddEmbeddedCollection( Relations.Message, page.Messages.Zip(payloads, (message, payload) => new HALResponse(new { message.MessageId, message.CreatedUtc, message.Position, message.StreamId, message.StreamVersion, message.Type, payload }).AddLinks(StreamMessageLinks.Self(message)))))); }
private static MidFunc GetStream(StreamResource stream) => next => async env => { var context = new OwinContext(env); var options = new ReadStreamOptions(context.Request); var response = await stream.GetPage(options, context.Request.CallCancelled); await context.WriteHalResponse(response); };
public static Link Self(ReadStreamOptions options) => new Link( Relations.Self, options.Self);