@@ -85,7 +85,7 @@ import Servant.API.Generic
85
85
(GenericMode (.. ), ToServant , ToServantApi
86
86
, GenericServant , toServant , fromServant )
87
87
import Servant.API.ContentTypes
88
- (contentTypes , AllMime (allMime ), AllMimeUnrender (allMimeUnrender ))
88
+ (contentTypes , AllMime (allMime ), AllMimeUnrender (allMimeUnrender ), EventStream )
89
89
import Servant.API.Status
90
90
(statusFromNat )
91
91
import Servant.API.TypeLevel (FragmentUnique , AtLeastOneFragment )
@@ -94,13 +94,18 @@ import Servant.API.Modifiers
94
94
import Servant.API.TypeErrors
95
95
import Servant.API.UVerb
96
96
(HasStatus , HasStatuses (Statuses , statuses ), UVerb , Union , Unique , inject , statusOf , foldMapUnion , matchUnion )
97
+ import Servant.API.ServerSentEvents
98
+ (EventKind (JsonEvent , RawEvent ), ServerSentEvents' )
99
+ import Servant.API.Stream
100
+ (NoFraming )
97
101
98
102
import Servant.Client.Core.Auth
99
103
import Servant.Client.Core.BasicAuth
100
104
import Servant.Client.Core.ClientError
101
105
import Servant.Client.Core.Request
102
106
import Servant.Client.Core.Response
103
107
import Servant.Client.Core.RunClient
108
+ import Servant.Client.Core.ServerSentEvents
104
109
105
110
-- * Accessing APIs as a Client
106
111
@@ -462,6 +467,63 @@ instance {-# OVERLAPPING #-}
462
467
, requestMethod = reflectMethod (Proxy :: Proxy method )
463
468
}
464
469
470
+ type SseClientDelegate method status =
471
+ Stream method status NoFraming EventStream
472
+
473
+ instance
474
+ ( RunClient m
475
+ , HasClient m (SseClientDelegate method status (EventMessageStreamT IO ))
476
+ )
477
+ => HasClient m (ServerSentEvents' method status 'RawEvent EventMessage ) where
478
+ type Client m (ServerSentEvents' method status 'RawEvent EventMessage ) =
479
+ Client m (SseClientDelegate method status (EventMessageStreamT IO ))
480
+
481
+ hoistClientMonad p _ =
482
+ hoistClientMonad
483
+ p
484
+ (Proxy :: Proxy (SseClientDelegate method status (EventMessageStreamT IO )))
485
+
486
+ clientWithRoute p _ =
487
+ clientWithRoute
488
+ p
489
+ (Proxy :: Proxy (SseClientDelegate method status (EventMessageStreamT IO )))
490
+
491
+ instance
492
+ ( RunClient m
493
+ , HasClient m (SseClientDelegate method status (EventStreamT IO ))
494
+ )
495
+ => HasClient m (ServerSentEvents' method status 'RawEvent (Event a )) where
496
+ type Client m (ServerSentEvents' method status 'RawEvent (Event a )) =
497
+ Client m (SseClientDelegate method status (EventStreamT IO ))
498
+
499
+ hoistClientMonad p _ =
500
+ hoistClientMonad
501
+ p
502
+ (Proxy :: Proxy (SseClientDelegate method status (EventStreamT IO )))
503
+
504
+ clientWithRoute p _ =
505
+ clientWithRoute
506
+ p
507
+ (Proxy :: Proxy (SseClientDelegate method status (EventStreamT IO )))
508
+
509
+ instance
510
+ ( RunClient m
511
+ , HasClient m (SseClientDelegate method status (JsonEventStreamT IO a ))
512
+ )
513
+ => HasClient m (ServerSentEvents' method status 'JsonEvent a ) where
514
+ type Client m (ServerSentEvents' method status 'JsonEvent a ) =
515
+ Client m (SseClientDelegate method status (JsonEventStreamT IO a ))
516
+
517
+ hoistClientMonad p _ =
518
+ hoistClientMonad
519
+ p
520
+ (Proxy :: Proxy (SseClientDelegate method status (JsonEventStreamT IO a )))
521
+
522
+ clientWithRoute p _ =
523
+ clientWithRoute
524
+ p
525
+ (Proxy :: Proxy (SseClientDelegate method status (JsonEventStreamT IO a )))
526
+
465
527
-- | If you use a 'Header' in one of your endpoints in your API,
466
528
-- the corresponding querying function will automatically take
467
529
-- an additional argument of the type specified by your 'Header',
0 commit comments