@@ -54,16 +54,21 @@ import Servant.API
54
54
contentType , getHeadersHList , getResponse , toQueryParam ,
55
55
toUrlPiece )
56
56
import Servant.API.ContentTypes
57
- (contentTypes )
57
+ (EventStream , contentTypes )
58
58
import Servant.API.Modifiers
59
59
(FoldRequired , RequiredArgument , foldRequiredArgument )
60
+ import Servant.API.ServerSentEvents
61
+ (EventKind (JsonEvent , RawEvent ), ServerSentEvents' )
62
+ import Servant.API.Stream
63
+ (NoFraming )
60
64
61
65
import Servant.Client.Core.Auth
62
66
import Servant.Client.Core.BasicAuth
63
67
import Servant.Client.Core.ClientError
64
68
import Servant.Client.Core.Request
65
69
import Servant.Client.Core.Response
66
70
import Servant.Client.Core.RunClient
71
+ import Servant.Client.Core.ServerSentEvents
67
72
68
73
-- * Accessing APIs as a Client
69
74
@@ -332,6 +337,63 @@ instance {-# OVERLAPPING #-}
332
337
, requestMethod = reflectMethod (Proxy :: Proxy method )
333
338
}
334
339
340
+ type SseClientDelegate method status =
341
+ Stream method status NoFraming EventStream
342
+
343
+ instance
344
+ ( RunClient m
345
+ , HasClient m (SseClientDelegate method status (EventMessageStreamT IO ))
346
+ )
347
+ => HasClient m (ServerSentEvents' method status 'RawEvent EventMessage ) where
348
+ type Client m (ServerSentEvents' method status 'RawEvent EventMessage ) =
349
+ Client m (SseClientDelegate method status (EventMessageStreamT IO ))
350
+
351
+ hoistClientMonad p _ =
352
+ hoistClientMonad
353
+ p
354
+ (Proxy :: Proxy (SseClientDelegate method status (EventMessageStreamT IO )))
355
+
356
+ clientWithRoute p _ =
357
+ clientWithRoute
358
+ p
359
+ (Proxy :: Proxy (SseClientDelegate method status (EventMessageStreamT IO )))
360
+
361
+ instance
362
+ ( RunClient m
363
+ , HasClient m (SseClientDelegate method status (EventStreamT IO ))
364
+ )
365
+ => HasClient m (ServerSentEvents' method status 'RawEvent (Event a )) where
366
+ type Client m (ServerSentEvents' method status 'RawEvent (Event a )) =
367
+ Client m (SseClientDelegate method status (EventStreamT IO ))
368
+
369
+ hoistClientMonad p _ =
370
+ hoistClientMonad
371
+ p
372
+ (Proxy :: Proxy (SseClientDelegate method status (EventStreamT IO )))
373
+
374
+ clientWithRoute p _ =
375
+ clientWithRoute
376
+ p
377
+ (Proxy :: Proxy (SseClientDelegate method status (EventStreamT IO )))
378
+
379
+ instance
380
+ ( RunClient m
381
+ , HasClient m (SseClientDelegate method status (JsonEventStreamT IO a ))
382
+ )
383
+ => HasClient m (ServerSentEvents' method status 'JsonEvent a ) where
384
+ type Client m (ServerSentEvents' method status 'JsonEvent a ) =
385
+ Client m (SseClientDelegate method status (JsonEventStreamT IO a ))
386
+
387
+ hoistClientMonad p _ =
388
+ hoistClientMonad
389
+ p
390
+ (Proxy :: Proxy (SseClientDelegate method status (JsonEventStreamT IO a )))
391
+
392
+ clientWithRoute p _ =
393
+ clientWithRoute
394
+ p
395
+ (Proxy :: Proxy (SseClientDelegate method status (JsonEventStreamT IO a )))
396
+
335
397
-- | If you use a 'Header' in one of your endpoints in your API,
336
398
-- the corresponding querying function will automatically take
337
399
-- an additional argument of the type specified by your 'Header',
0 commit comments