Skip to content

Commit ff020da

Browse files
committed
Utilize 'StepT' over 'SourceT' for event stream sources
1 parent 3b3af68 commit ff020da

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

servant-client-core/src/Servant/Client/Core/ServerSentEvents.hs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import Servant.API.ContentTypes
4848
import Servant.API.Stream
4949
(FromSourceIO (..))
5050
import Servant.Types.SourceT
51-
(SourceT, StepT (..), foreachYieldStep, mapStepT,
51+
(SourceT (unSourceT), StepT (..), foreachYieldStep, mapStepT,
5252
transformStepWithAtto)
5353

5454
-- | Line (or frame) of an event stream
@@ -249,7 +249,7 @@ eventsFromMessages =
249249
-- See <https://www.w3.org/TR/2009/WD-eventsource-20090421/> for more details.
250250
--
251251
newtype EventMessageStreamT m = EventMessageStreamT
252-
{ unEventMessageStreamT :: SourceT m EventMessage }
252+
{ unEventMessageStreamT :: StepT m EventMessage }
253253
deriving (Show, Semigroup, Monoid)
254254

255255
-- | Server-sent event messages
@@ -260,23 +260,27 @@ newtype EventMessageStreamT m = EventMessageStreamT
260260
instance MonadIO m => FromSourceIO EventStreamChunk (EventMessageStreamT m) where
261261
fromSourceIO =
262262
EventMessageStreamT
263-
. mapStepT (eventMessagesFromLines . eventLinesFromChunks)
263+
. eventMessagesFromLines
264+
. eventLinesFromChunks
265+
. Effect
266+
. ($ pure)
267+
. unSourceT
264268
. fromSourceIO
265269

266270
-- | Server-sent event stream (SSE)
267271
--
268272
-- See <https://www.w3.org/TR/2009/WD-eventsource-20090421/> for more details.
269273
--
270274
newtype EventStreamT m = EventStreamT
271-
{ unEventStreamT :: SourceT m (Event ByteString.ByteString) }
275+
{ unEventStreamT :: StepT m (Event ByteString.ByteString) }
272276
deriving (Show, Semigroup, Monoid)
273277

274278
-- | Server-sent events
275279
instance MonadIO m => FromSourceIO EventStreamChunk (EventStreamT m) where
276280
fromSourceIO input =
277281
-- 'coerce' is used in place of unpacking and repacking 'EventStreamT'
278282
coerce
279-
(mapStepT eventsFromMessages)
283+
eventsFromMessages
280284
(fromSourceIO input :: EventMessageStreamT m)
281285

282286
-- | Try to parse event data to JSON.
@@ -293,7 +297,7 @@ jsonEventsFromEvents =
293297

294298
-- | Server-sent event stream (SSE) for JSON values
295299
newtype JsonEventStreamT m a = JsonEventStreamT
296-
{ unJsonEventStreamT :: SourceT m (Event a) }
300+
{ unJsonEventStreamT :: StepT m (Event a) }
297301
deriving (Show, Functor, Semigroup, Monoid)
298302

299303
-- | Server-sent JSON event stream
@@ -302,5 +306,5 @@ instance (MonadIO m, Aeson.FromJSON a) => FromSourceIO EventStreamChunk (JsonEve
302306
-- The 'coerce' efficiently unwraps the 'EventStreamT' and wraps the
303307
-- JsonEventStreamT.
304308
coerce
305-
(mapStepT jsonEventsFromEvents)
309+
jsonEventsFromEvents
306310
(fromSourceIO input :: EventStreamT m)

servant-client-core/test/Servant/Client/Core/ServerSentEventsSpec.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import Servant.Client.Core.ServerSentEvents
1717
(Event (..), EventIgnoreReason (EventComment),
1818
EventMessage (..), unEventMessageStreamT, unEventStreamT)
1919
import Servant.Types.SourceT
20-
(runSourceT, source)
20+
(runStepT, source)
2121
import Test.Hspec
2222
(Spec, describe, it, shouldBe)
2323

@@ -41,7 +41,7 @@ spec = describe "Servant.Client.Core.ServerSentEvent" $ do
4141
for_ [1, 10, 100] $ \chunkSize -> do
4242
result <-
4343
runExceptT
44-
$ runSourceT
44+
$ runStepT
4545
$ unEventMessageStreamT
4646
$ fromSourceIO
4747
$ source
@@ -80,7 +80,7 @@ spec = describe "Servant.Client.Core.ServerSentEvent" $ do
8080
for_ [1, 10, 100] $ \chunkSize -> do
8181
result <-
8282
runExceptT
83-
$ runSourceT
83+
$ runStepT
8484
$ unEventStreamT
8585
$ fromSourceIO
8686
$ source

0 commit comments

Comments
 (0)