@@ -160,6 +160,7 @@ type Api =
160160 WithStatus 301 Text]
161161 :<|> "uverb-get-created" :> UVerb 'GET '[PlainText] '[WithStatus 201 Person]
162162 :<|> NamedRoutes RecordRoutes
163+ :<|> "captureVerbatim" :> Capture "someString" Verbatim :> Get '[PlainText] Text
163164
164165api :: Proxy Api
165166api = Proxy
@@ -214,7 +215,8 @@ getRoot
214215 :<|> EmptyClient
215216 :<|> uverbGetSuccessOrRedirect
216217 :<|> uverbGetCreated
217− :<|> recordRoutes = client api
218+ :<|> recordRoutes
219+ :<|> captureVerbatim = client api
218220
219221server :: Application
220222server = serve api (
@@ -259,6 +261,7 @@ server = serve api (
259261 { something = pure ["foo", "bar", "pweet"]
260262 }
261263 }
264+ :<|> pure . decodeUtf8 . unVerbatim
262265 )
263266
264267-- * api for testing failures
@@ -370,3 +373,12 @@ instance ToHttpApiData UrlEncodedByteString where
370373
371374instance FromHttpApiData UrlEncodedByteString where
372375 parseUrlPiece = pure . UrlEncodedByteString . HTTP.urlDecode True . encodeUtf8
376+
377+newtype Verbatim = Verbatim { unVerbatim :: ByteString }
378+
379+instance ToHttpApiData Verbatim where
380+ toEncodedUrlPiece = byteString . unVerbatim
381+ toUrlPiece = decodeUtf8 . unVerbatim
382+
383+instance FromHttpApiData Verbatim where
384+ parseUrlPiece = pure . Verbatim . encodeUtf8