Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions changelog.d/pr-1926
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
synopsis: Add a `HasLink` instance for `ServerSentEvents'`
packages: servant
prs: #1926
description: {
`safeLink`, `allLinks` and `fieldLink` now work on APIs that contain
`ServerSentEvents` endpoints.
}
5 changes: 5 additions & 0 deletions servant/src/Servant/Internal/Links.hs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ import Servant.API.QueryString
import Servant.API.Raw (Raw, RawM)
import Servant.API.RemoteHost (RemoteHost)
import Servant.API.ReqBody (ReqBody')
import Servant.API.ServerSentEvents (ServerSentEvents')
import Servant.API.Stream (Stream, StreamBody')
import Servant.API.Sub (type (:>))
import Servant.API.TypeErrors
Expand Down Expand Up @@ -572,6 +573,10 @@ instance HasLink (Stream m status fr ct a) where
type MkLink (Stream m status fr ct a) r = r
toLink toA _ = toA

instance HasLink (ServerSentEvents' m status kind a) where
type MkLink (ServerSentEvents' m status kind a) r = r
toLink toA _ = toA

-- UVerb instances
instance HasLink (UVerb m ct a) where
type MkLink (UVerb m ct a) r = r
Expand Down
6 changes: 6 additions & 0 deletions servant/test/Servant/LinksSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ type TestApi =
:<|> "say" :> Fragment String :> Get '[JSON] NoContent
-- UVerb
:<|> "uverb-example" :> UVerb 'GET '[JSON] '[WithStatus 200 NoContent]
-- ServerSentEvents
:<|> "events" :> ServerSentEvents 'JsonEvent Int
-- DeepQuery
:<|> "books" :> DeepQuery "filter" BookQuery :> Get '[JSON] [Book]
-- All of the verbs
Expand Down Expand Up @@ -155,6 +157,10 @@ spec = describe "Servant.Links" $ do
apiLink (Proxy :: Proxy ("uverb-example" :> UVerb 'GET '[JSON] '[WithStatus 200 NoContent]))
`shouldBeLink` "uverb-example"

it "generates correct links for ServerSentEvents" $ do
apiLink (Proxy :: Proxy ("events" :> ServerSentEvents 'JsonEvent Int))
`shouldBeLink` "events"

it "generates correct links for query flags" $ do
let l1 =
Proxy
Expand Down
Loading