@@ -65,9 +65,12 @@ import Servant.API
65 NoContent (NoContent), PlainText, Post, QueryFlag, QueryParam,
65 NoContent (NoContent), PlainText, Post, QueryFlag, QueryParam,
66 QueryParams, Raw, ReqBody, StdMethod (GET), ToHttpApiData (..), UVerb, Union,
66 QueryParams, Raw, ReqBody, StdMethod (GET), ToHttpApiData (..), UVerb, Union,
67 WithStatus (WithStatus), addHeader)
67 WithStatus (WithStatus), addHeader)
68+import Servant.API.Generic
68import Servant.Client
69import Servant.Client
70+import Servant.Client.Generic
69import qualified Servant.Client.Core.Auth as Auth
71import qualified Servant.Client.Core.Auth as Auth
70import Servant.Server
72import Servant.Server
73+import Servant.Server.Generic
71import Servant.Server.Experimental.Auth
74import Servant.Server.Experimental.Auth
72import Servant.Test.ComprehensiveAPI
75import Servant.Test.ComprehensiveAPI
@@ -107,6 +110,16 @@ carol = Person "Carol" 17
108type TestHeaders = '[Header "X-Example1" Int, Header "X-Example2" String]
111type TestHeaders = '[Header "X-Example1" Int, Header "X-Example2" String]
113+data RecordRoutes mode = RecordRoutes
114+ { version :: mode :- "version" :> Get '[JSON] Int
115+ , echo :: mode :- "echo" :> Capture "string" String :> Get '[JSON] String
116+ , otherRoutes :: mode :- "other" :> NamedRoutes OtherRoutes
119+data OtherRoutes mode = OtherRoutes
120+ { something :: mode :- "something" :> Get '[JSON] [String]
110type Api =
123type Api =
111 Get '[JSON] Person
124 Get '[JSON] Person
112 :<|> "get" :> Get '[JSON] Person
125 :<|> "get" :> Get '[JSON] Person
@@ -141,6 +154,7 @@ type Api =
141 UVerb 'GET '[PlainText] '[WithStatus 200 Person,
154 UVerb 'GET '[PlainText] '[WithStatus 200 Person,
142 WithStatus 301 Text]
155 WithStatus 301 Text]
143 :<|> "uverb-get-created" :> UVerb 'GET '[PlainText] '[WithStatus 201 Person]
156 :<|> "uverb-get-created" :> UVerb 'GET '[PlainText] '[WithStatus 201 Person]
157+ :<|> NamedRoutes RecordRoutes
146api :: Proxy Api
160api :: Proxy Api
@@ -192,7 +206,8 @@ getRoot
192 :<|> getRedirectWithCookie
206 :<|> getRedirectWithCookie
193 :<|> EmptyClient
207 :<|> EmptyClient
194 :<|> uverbGetSuccessOrRedirect
208 :<|> uverbGetSuccessOrRedirect
195− :<|> uverbGetCreated = client api
209+ :<|> uverbGetCreated
210+ :<|> recordRoutes = client api
197server :: Application
212server :: Application
198server = serve api (
213server = serve api (
@@ -229,6 +244,13 @@ server = serve api (
229 then respond (WithStatus @301 ("redirecting" :: Text))
244 then respond (WithStatus @301 ("redirecting" :: Text))
230 else respond (WithStatus @200 alice ))
245 else respond (WithStatus @200 alice ))
231 :<|> respond (WithStatus @201 carol)
246 :<|> respond (WithStatus @201 carol)
250+ , otherRoutes = OtherRoutes
251+ { something = pure ["foo", "bar", "pweet"]
234type FailApi =
256type FailApi =