@@ -5,6 +5,7 @@ open SqlStreamStore.Streams
55
66module Get =
77
8+ // A function to help wit type inference in this module
89 let private curriedMap : ( ReadStreamPage -> 'a ) -> AsyncResult < ReadStreamPage , exn > -> AsyncResult < 'a , exn > =
910 AsyncResult.map
1011
@@ -37,6 +38,39 @@ module Get =
3738 let nextStreamVersion =
3839 curriedMap ( fun page -> page.NextStreamVersion)
3940
41+ let nextStreamPage =
42+ AsyncResult.bind ( fun ( page : ReadStreamPage ) -> page.ReadNext |> AsyncResult.ofTask)
43+
44+ module GetAll =
45+
46+ // A function to help wit type inference in this module
47+ let private curriedMap : ( ReadAllPage -> 'a ) -> AsyncResult < ReadAllPage , exn > -> AsyncResult < 'a , exn > =
48+ AsyncResult.map
49+
50+ let messages =
51+ curriedMap ( fun page -> page.Messages |> Array.toList)
52+
53+ let messagesData =
54+ messages
55+ >> AsyncResult.bind ( List.traverseAsyncResultM ( fun msg -> msg.GetJsonData()))
56+
57+ let messagesDataAs < 'data > =
58+ messages
59+ >> AsyncResult.bind ( List.traverseAsyncResultM ( fun msg -> msg.GetJsonDataAs< 'data>()))
60+
61+ let direction = curriedMap ( fun page -> page.Direction)
62+
63+ let fromPosition =
64+ curriedMap ( fun page -> page.FromPosition)
65+
66+ let isEnd = curriedMap ( fun page -> page.IsEnd)
67+
68+ let nextPosition =
69+ curriedMap ( fun page -> page.NextPosition)
70+
71+ let nextAllStreamPage =
72+ AsyncResult.bind ( fun ( page : ReadAllPage ) -> page.ReadNext |> AsyncResult.ofTask)
73+
4074
4175namespace SqlStreamStore.FSharp.EventSourcing
4276
@@ -59,6 +93,10 @@ module Get =
5993 events< 'event>
6094 >> AsyncResult.bind ( List.traverseAsyncResultM ( fun event -> event.data))
6195
96+ let eventDataAsString < 'event > =
97+ events< 'event>
98+ >> AsyncResult.bind ( List.traverseAsyncResultM ( fun event -> event.dataAsString))
99+
62100 let eventsAndEventsData < 'event > =
63101 fun ( page : AsyncResult < ReadStreamPage , exn >) ->
64102 asyncResult {
@@ -67,6 +105,28 @@ module Get =
67105 return List.zip events' data
68106 }
69107
108+ module GetAll =
109+ let events < 'event > =
110+ GetAll.messages
111+ >> Async.map (
112+ Result.bind (
113+ List.filter ( fun msg -> Seq.contains msg.Type ( getEventUnionCases< 'event> ()))
114+ >> List.traverseResultM StreamEvent.ofStreamMessage< 'event>
115+ )
116+ )
117+
118+ let eventsData < 'event > =
119+ events< 'event>
120+ >> AsyncResult.bind ( List.traverseAsyncResultM ( fun event -> event.data))
121+
70122 let eventDataAsString < 'event > =
71123 events< 'event>
72124 >> AsyncResult.bind ( List.traverseAsyncResultM ( fun event -> event.dataAsString))
125+
126+ let eventsAndEventsData < 'event > =
127+ fun ( page : AsyncResult < ReadAllPage , exn >) ->
128+ asyncResult {
129+ let! events ' = events< 'event> page
130+ let! data = List.traverseAsyncResultM ( fun event -> event.data) events'
131+ return List.zip events' data
132+ }
0 commit comments