diff --git a/src/Orb/Handler/Handler.hs b/src/Orb/Handler/Handler.hs index b76f215..7778316 100644 --- a/src/Orb/Handler/Handler.hs +++ b/src/Orb/Handler/Handler.hs @@ -24,6 +24,8 @@ import Data.ByteString.Lazy qualified as LBS import Data.Kind qualified as Kind import Data.Maybe (maybeToList) import Data.Text qualified as T +import Fleece.Aeson qualified as FA +import Fleece.Core qualified as FC import Network.Wai qualified as Wai import Network.Wai.Parse qualified as Wai import Shrubbery qualified as S @@ -85,7 +87,11 @@ data NoRequestBody = NoRequestBody data RequestBody body tags where - RequestBody :: + RequestSchema :: + Response.Has422Response tags => + (forall schema. FC.Fleece schema => schema body) -> + RequestBody body tags + RequestRawBody :: Response.HasResponseCodeWithType tags "422" err => (LBS.ByteString -> Either err body) -> RequestBody body tags @@ -109,7 +115,12 @@ runHandler :: m Wai.ResponseReceived runHandler handler route = case requestBody handler of - RequestBody bodyDecoder -> + RequestSchema schema -> + requestSchemaHandler + schema + (handlerResponseBodies handler) + (runPermissionAction handler route) + RequestRawBody bodyDecoder -> requestBodyHandler bodyDecoder (handlerResponseBodies handler) @@ -207,6 +218,28 @@ requestFormDataHandler requestDecoder bodies action = Left err -> Response.return422 err Right request -> action request +requestSchemaHandler :: + ( Response.Has422Response tags + , Response.Has500Response tags + , HasLogger.HasLogger m + , HasRequest.HasRequest m + , HasRespond.HasRespond m + , UnliftIO.MonadUnliftIO m + ) => + (forall schema. FC.Fleece schema => schema request) -> + Response.ResponseBodies tags -> + (request -> m (S.TaggedUnion tags)) -> + m Wai.ResponseReceived +requestSchemaHandler schema bodies action = + emptyRequestBodyHandler bodies $ do + req <- HasRequest.request + body <- UnliftIO.liftIO $ Wai.consumeRequestBodyStrict req + case FA.decode schema body of + Left err -> + Response.return422 . Response.UnprocessableContentMessage $ T.pack err + Right request -> + action request + requestBodyHandler :: ( Response.HasResponseCodeWithType tags "422" err , Response.Has500Response tags diff --git a/src/Orb/Response/Response.hs b/src/Orb/Response/Response.hs index f02d51d..714faf2 100644 --- a/src/Orb/Response/Response.hs +++ b/src/Orb/Response/Response.hs @@ -21,6 +21,7 @@ import Control.Monad.IO.Class qualified as MIO import Data.ByteString qualified as BS import Data.ByteString.Lazy qualified as LBS import Data.Map.Strict qualified as Map +import Fleece.Core qualified as FC import GHC.TypeLits (KnownNat) import Network.HTTP.Types qualified as HTTP import Network.Wai (Response, ResponseReceived) @@ -39,9 +40,14 @@ responseBodyList = Map.toList . responseStatusMap data ResponseBody where - ResponseContent :: ContentType -> (a -> LBS.ByteString) -> ResponseBody - ResponseDocument :: ResponseBody - EmptyResponseBody :: ResponseBody + ResponseContent :: + ContentType -> (body -> LBS.ByteString) -> ResponseBody + ResponseSchema :: + (forall schema. FC.Fleece schema => schema body) -> ResponseBody + ResponseDocument :: + ResponseBody + EmptyResponseBody :: + ResponseBody data ResponseData = ResponseData { responseDataStatus :: HTTP.Status diff --git a/src/Orb/Response/StatusCodes.hs b/src/Orb/Response/StatusCodes.hs index a936625..9459269 100644 --- a/src/Orb/Response/StatusCodes.hs +++ b/src/Orb/Response/StatusCodes.hs @@ -11,91 +11,133 @@ module Orb.Response.StatusCodes , addResponse101 , addResponseDocument200 , addResponseBody200 + , addResponseSchema200 , addResponseDocument201 , addResponseBody201 + , addResponseSchema201 , addResponseDocument202 , addResponseBody202 + , addResponseSchema202 , addResponseDocument203 , addResponseBody203 + , addResponseSchema203 , addResponse204 , addResponse205 , addResponseDocument206 , addResponseBody206 + , addResponseSchema206 , addResponseDocument300 , addResponseBody300 + , addResponseSchema300 , addResponseDocument301 , addResponseBody301 + , addResponseSchema301 , addResponseDocument302 , addResponseBody302 + , addResponseSchema302 , addResponseDocument303 , addResponseBody303 + , addResponseSchema303 , addResponse304 , addResponseDocument305 , addResponseBody305 + , addResponseSchema305 , addResponseDocument307 , addResponseBody307 + , addResponseSchema307 , addResponseDocument308 , addResponseBody308 + , addResponseSchema308 , addResponseDocument400 , addResponseBody400 + , addResponseSchema400 , addResponseDocument401 , addResponseBody401 + , addResponseSchema401 , addResponseDocument402 , addResponseBody402 + , addResponseSchema402 , addResponseDocument403 , addResponseBody403 + , addResponseSchema403 , addResponseDocument404 , addResponseBody404 + , addResponseSchema404 , addResponseDocument405 , addResponseBody405 + , addResponseSchema405 , addResponseDocument406 , addResponseBody406 + , addResponseSchema406 , addResponseDocument407 , addResponseBody407 + , addResponseSchema407 , addResponseDocument408 , addResponseBody408 + , addResponseSchema408 , addResponseDocument409 , addResponseBody409 + , addResponseSchema409 , addResponseDocument410 , addResponseBody410 + , addResponseSchema410 , addResponseDocument411 , addResponseBody411 + , addResponseSchema411 , addResponseDocument412 , addResponseBody412 + , addResponseSchema412 , addResponseDocument413 , addResponseBody413 + , addResponseSchema413 , addResponseDocument414 , addResponseBody414 + , addResponseSchema414 , addResponseDocument415 , addResponseBody415 + , addResponseSchema415 , addResponseDocument416 , addResponseBody416 + , addResponseSchema416 , addResponseDocument417 , addResponseBody417 + , addResponseSchema417 , addResponseDocument418 , addResponseBody418 + , addResponseSchema418 , addResponseDocument422 , addResponseBody422 + , addResponseSchema422 , addResponseDocument428 , addResponseBody428 + , addResponseSchema428 , addResponseDocument429 , addResponseBody429 + , addResponseSchema429 , addResponseDocument431 , addResponseBody431 + , addResponseSchema431 , addResponseDocument500 , addResponseBody500 + , addResponseSchema500 , addResponseDocument501 , addResponseBody501 + , addResponseSchema501 , addResponseDocument502 , addResponseBody502 + , addResponseSchema502 , addResponseDocument503 , addResponseBody503 + , addResponseSchema503 , addResponseDocument504 , addResponseBody504 + , addResponseSchema504 , addResponseDocument505 , addResponseBody505 + , addResponseSchema505 , addResponseDocument511 , addResponseBody511 + , addResponseSchema511 , Response100 , Response101 , Response200 @@ -245,12 +287,14 @@ import Data.ByteString.Lazy qualified as LBS import Data.CaseInsensitive qualified as CI import Data.Map.Strict qualified as Map import Data.Proxy (Proxy (Proxy)) +import Fleece.Aeson qualified as FA +import Fleece.Core qualified as FC import GHC.TypeLits (KnownNat) import Network.HTTP.Types qualified as HTTP import Shrubbery (type (@=)) import Shrubbery qualified as S -import Orb.Response.ContentType (ContentType) +import Orb.Response.ContentType (ContentType, applicationJson) import Orb.Response.Document (Document (..)) import Orb.Response.Response (ResponseBodiesBuilder (..), ResponseBody (..), ResponseData (..)) import Orb.Response.Schemas (NoContent (..)) @@ -302,6 +346,48 @@ addResponseBody contentType encoder builder = (responseStatusMapBuilder builder) } +{- | Adds a Fleece response for a given status code to the + 'ResponseBodiesBuilder'. + +This function associates some type @a@ to a response code identified by the +type-level @tag@. The response body will be the encoding of the type as encoded +by Fleece, and the @Content-Type@ will be set to /application\/json/. + +@since 0.1.0 +-} +addResponseSchema :: + forall tag tags a. + KnownHTTPStatus tag => + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder tags -> + ResponseBodiesBuilder ((tag @= (a, HTTP.ResponseHeaders)) : tags) +addResponseSchema schema builder = + let + proxyTag :: Proxy tag + proxyTag = Proxy + + status = + httpStatusVal proxyTag + + runEncoder :: (a, HTTP.ResponseHeaders) -> ResponseData + runEncoder (value, headers) = + ResponseData + { responseDataStatus = status + , responseDataBytes = FA.encode schema value + , responseDataContentType = Just applicationJson + , responseDataExtraHeaders = headers + } + in + ResponseBodiesBuilder + { encodeResponseBranchesBuilder = + S.taggedBranch @tag runEncoder (encodeResponseBranchesBuilder builder) + , responseStatusMapBuilder = + Map.insert + status + (ResponseSchema schema) + (responseStatusMapBuilder builder) + } + {- | Adds a document response for a given status code to the 'ResponseBodiesBuilder'. @@ -1147,7 +1233,7 @@ addResponse101 = @ responseBodies - . addResponseBody200 myTypeEncoderFn + . addResponseBody200 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1165,6 +1251,26 @@ addResponseBody200 :: addResponseBody200 = addResponseBody @"200" +{- | Appends an HTTP 200 (OK) Fleece response to the set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema200 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema200 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response200 a : responseCodes) +addResponseSchema200 = + addResponseSchema @"200" + {- | Appends an HTTP 200 (OK) document response to the set of possible responses. @@ -1192,7 +1298,7 @@ responses. @ responseBodies - . addResponseBody201 myTypeEncoderFn + . addResponseBody201 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1210,6 +1316,27 @@ addResponseBody201 :: addResponseBody201 = addResponseBody @"201" +{- | Appends an HTTP 201 (Created) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema201 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema201 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response201 a : responseCodes) +addResponseSchema201 = + addResponseSchema @"201" + {- | Appends an HTTP 201 (Created) document response to the set of possible responses. @@ -1237,7 +1364,7 @@ responses. @ responseBodies - . addResponseBody202 myTypeEncoderFn + . addResponseBody202 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1255,6 +1382,27 @@ addResponseBody202 :: addResponseBody202 = addResponseBody @"202" +{- | Appends an HTTP 202 (Accepted) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema202 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema202 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response202 a : responseCodes) +addResponseSchema202 = + addResponseSchema @"202" + {- | Appends an HTTP 202 (Accepted) document response to the set of possible responses. @@ -1282,7 +1430,7 @@ set of possible responses. @ responseBodies - . addResponseBody203 myTypeEncoderFn + . addResponseBody203 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1300,6 +1448,27 @@ addResponseBody203 :: addResponseBody203 = addResponseBody @"203" +{- | Appends an HTTP 203 (Non-Authoritative Information) Fleece response to the +set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema203 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema203 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response203 a : responseCodes) +addResponseSchema203 = + addResponseSchema @"203" + {- | Appends an HTTP 203 (Non-Authoritative Information) document response to the set of possible responses. @@ -1327,7 +1496,7 @@ possible responses. @ responseBodies - . addResponse204 myTypeEncoderFn + . addResponse204 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1365,7 +1534,7 @@ possible responses. @ responseBodies - . addResponseBody206 myTypeEncoderFn + . addResponseBody206 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1383,6 +1552,27 @@ addResponseBody206 :: addResponseBody206 = addResponseBody @"206" +{- | Appends an HTTP 206 (Partial Content) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema206 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema206 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response206 a : responseCodes) +addResponseSchema206 = + addResponseSchema @"206" + {- | Appends an HTTP 206 (Partial Content) document response to the set of possible responses. @@ -1410,7 +1600,7 @@ possible responses. @ responseBodies - . addResponseBody300 myTypeEncoderFn + . addResponseBody300 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1428,6 +1618,27 @@ addResponseBody300 :: addResponseBody300 = addResponseBody @"300" +{- | Appends an HTTP 300 (Multiple Choices) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema300 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema300 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response300 a : responseCodes) +addResponseSchema300 = + addResponseSchema @"300" + {- | Appends an HTTP 300 (Multiple Choices) document response to the set of possible responses. @@ -1455,7 +1666,7 @@ possible responses. @ responseBodies - . addResponseBody301 myTypeEncoderFn + . addResponseBody301 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1473,6 +1684,27 @@ addResponseBody301 :: addResponseBody301 = addResponseBody @"301" +{- | Appends an HTTP 301 (Moved Permanently) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema301 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema301 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response301 a : responseCodes) +addResponseSchema301 = + addResponseSchema @"301" + {- | Appends an HTTP 301 (Moved Permanently) document response to the set of possible responses. @@ -1500,7 +1732,7 @@ responses. @ responseBodies - . addResponseBody302 myTypeEncoderFn + . addResponseBody302 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1518,6 +1750,27 @@ addResponseBody302 :: addResponseBody302 = addResponseBody @"302" +{- | Appends an HTTP 302 (Found) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema302 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema302 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response302 a : responseCodes) +addResponseSchema302 = + addResponseSchema @"302" + {- | Appends an HTTP 302 (Found) document response to the set of possible responses. @@ -1545,7 +1798,7 @@ responses. @ responseBodies - . addResponseBody303 myTypeEncoderFn + . addResponseBody303 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1563,6 +1816,27 @@ addResponseBody303 :: addResponseBody303 = addResponseBody @"303" +{- | Appends an HTTP 303 (See Other) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema303 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema303 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response303 a : responseCodes) +addResponseSchema303 = + addResponseSchema @"303" + {- | Appends an HTTP 303 (See Other) document response to the set of possible responses. @@ -1590,7 +1864,7 @@ possible responses. @ responseBodies - . addResponse304 myTypeEncoderFn + . addResponse304 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1609,7 +1883,7 @@ responses. @ responseBodies - . addResponseBody305 myTypeEncoderFn + . addResponseBody305 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1627,6 +1901,27 @@ addResponseBody305 :: addResponseBody305 = addResponseBody @"305" +{- | Appends an HTTP 305 (Use Proxy) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema305 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema305 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response305 a : responseCodes) +addResponseSchema305 = + addResponseSchema @"305" + {- | Appends an HTTP 305 (Use Proxy) document response to the set of possible responses. @@ -1654,7 +1949,7 @@ possible responses. @ responseBodies - . addResponseBody307 myTypeEncoderFn + . addResponseBody307 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1672,6 +1967,27 @@ addResponseBody307 :: addResponseBody307 = addResponseBody @"307" +{- | Appends an HTTP 307 (Temporary Redirect) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema307 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema307 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response307 a : responseCodes) +addResponseSchema307 = + addResponseSchema @"307" + {- | Appends an HTTP 307 (Temporary Redirect) document response to the set of possible responses. @@ -1699,7 +2015,7 @@ possible responses. @ responseBodies - . addResponseBody308 myTypeEncoderFn + . addResponseBody308 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1717,6 +2033,27 @@ addResponseBody308 :: addResponseBody308 = addResponseBody @"308" +{- | Appends an HTTP 308 (Permanent Redirect) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema308 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema308 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response308 a : responseCodes) +addResponseSchema308 = + addResponseSchema @"308" + {- | Appends an HTTP 308 (Permanent Redirect) document response to the set of possible responses. @@ -1744,7 +2081,7 @@ responses. @ responseBodies - . addResponseBody400 myTypeEncoderFn + . addResponseBody400 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1762,6 +2099,27 @@ addResponseBody400 :: addResponseBody400 = addResponseBody @"400" +{- | Appends an HTTP 400 (Bad Request) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema400 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema400 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response400 a : responseCodes) +addResponseSchema400 = + addResponseSchema @"400" + {- | Appends an HTTP 400 (Bad Request) document response to the set of possible responses. @@ -1789,7 +2147,7 @@ responses. @ responseBodies - . addResponseBody401 myTypeEncoderFn + . addResponseBody401 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1807,6 +2165,27 @@ addResponseBody401 :: addResponseBody401 = addResponseBody @"401" +{- | Appends an HTTP 401 (Unauthorized) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema401 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema401 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response401 a : responseCodes) +addResponseSchema401 = + addResponseSchema @"401" + {- | Appends an HTTP 401 (Unauthorized) document response to the set of possible responses. @@ -1834,7 +2213,7 @@ possible responses. @ responseBodies - . addResponseBody402 myTypeEncoderFn + . addResponseBody402 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1852,34 +2231,55 @@ addResponseBody402 :: addResponseBody402 = addResponseBody @"402" -{- | Appends an HTTP 402 (Payment Required) document response to the set of +{- | Appends an HTTP 402 (Payment Required) Fleece response to the set of possible responses. /Example usage/: @ responseBodies - . addResponseDocument402 + . addResponseSchema402 myTypeSchema $ noResponseBodies @ @since 0.1.0 -} -addResponseDocument402 :: - forall responseCodes. +addResponseSchema402 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> ResponseBodiesBuilder responseCodes -> - ResponseBodiesBuilder (Response402 Document : responseCodes) -addResponseDocument402 = - addResponseDocument @"402" + ResponseBodiesBuilder (Response402 a : responseCodes) +addResponseSchema402 = + addResponseSchema @"402" -{- | Appends an HTTP 403 (Forbidden) typed response to the set of possible -responses. +{- | Appends an HTTP 402 (Payment Required) document response to the set of +possible responses. /Example usage/: @ responseBodies - . addResponseBody403 myTypeEncoderFn + . addResponseDocument402 + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseDocument402 :: + forall responseCodes. + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response402 Document : responseCodes) +addResponseDocument402 = + addResponseDocument @"402" + +{- | Appends an HTTP 403 (Forbidden) typed response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseBody403 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1897,6 +2297,27 @@ addResponseBody403 :: addResponseBody403 = addResponseBody @"403" +{- | Appends an HTTP 403 (Forbidden) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema403 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema403 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response403 a : responseCodes) +addResponseSchema403 = + addResponseSchema @"403" + {- | Appends an HTTP 403 (Forbidden) document response to the set of possible responses. @@ -1924,7 +2345,7 @@ responses. @ responseBodies - . addResponseBody404 myTypeEncoderFn + . addResponseBody404 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1942,6 +2363,27 @@ addResponseBody404 :: addResponseBody404 = addResponseBody @"404" +{- | Appends an HTTP 404 (Not Found) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema404 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema404 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response404 a : responseCodes) +addResponseSchema404 = + addResponseSchema @"404" + {- | Appends an HTTP 404 (Not Found) document response to the set of possible responses. @@ -1969,7 +2411,7 @@ possible responses. @ responseBodies - . addResponseBody405 myTypeEncoderFn + . addResponseBody405 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -1987,6 +2429,27 @@ addResponseBody405 :: addResponseBody405 = addResponseBody @"405" +{- | Appends an HTTP 405 (Method Not Allowed) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema405 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema405 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response405 a : responseCodes) +addResponseSchema405 = + addResponseSchema @"405" + {- | Appends an HTTP 405 (Method Not Allowed) document response to the set of possible responses. @@ -2014,7 +2477,7 @@ responses. @ responseBodies - . addResponseBody406 myTypeEncoderFn + . addResponseBody406 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2032,6 +2495,27 @@ addResponseBody406 :: addResponseBody406 = addResponseBody @"406" +{- | Appends an HTTP 406 (Not Acceptable) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema406 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema406 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response406 a : responseCodes) +addResponseSchema406 = + addResponseSchema @"406" + {- | Appends an HTTP 406 (Not Acceptable) document response to the set of possible responses. @@ -2059,7 +2543,7 @@ set of possible responses. @ responseBodies - . addResponseBody407 myTypeEncoderFn + . addResponseBody407 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2077,6 +2561,27 @@ addResponseBody407 :: addResponseBody407 = addResponseBody @"407" +{- | Appends an HTTP 407 (Proxy Authentication Required) Fleece response to the +set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema407 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema407 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response407 a : responseCodes) +addResponseSchema407 = + addResponseSchema @"407" + {- | Appends an HTTP 407 (Proxy Authentication Required) document response to the set of possible responses. @@ -2104,7 +2609,7 @@ possible responses. @ responseBodies - . addResponseBody408 myTypeEncoderFn + . addResponseBody408 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2122,6 +2627,27 @@ addResponseBody408 :: addResponseBody408 = addResponseBody @"408" +{- | Appends an HTTP 408 (Request Timeout) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema408 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema408 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response408 a : responseCodes) +addResponseSchema408 = + addResponseSchema @"408" + {- | Appends an HTTP 408 (Request Timeout) document response to the set of possible responses. @@ -2149,7 +2675,7 @@ responses. @ responseBodies - . addResponseBody409 myTypeEncoderFn + . addResponseBody409 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2167,6 +2693,27 @@ addResponseBody409 :: addResponseBody409 = addResponseBody @"409" +{- | Appends an HTTP 409 (Conflict) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema409 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema409 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response409 a : responseCodes) +addResponseSchema409 = + addResponseSchema @"409" + {- | Appends an HTTP 409 (Conflict) document response to the set of possible responses. @@ -2194,7 +2741,7 @@ responses. @ responseBodies - . addResponseBody410 myTypeEncoderFn + . addResponseBody410 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2212,6 +2759,27 @@ addResponseBody410 :: addResponseBody410 = addResponseBody @"410" +{- | Appends an HTTP 410 (Gone) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema410 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema410 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response410 a : responseCodes) +addResponseSchema410 = + addResponseSchema @"410" + {- | Appends an HTTP 410 (Gone) document response to the set of possible responses. @@ -2239,7 +2807,7 @@ possible responses. @ responseBodies - . addResponseBody411 myTypeEncoderFn + . addResponseBody411 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2257,6 +2825,27 @@ addResponseBody411 :: addResponseBody411 = addResponseBody @"411" +{- | Appends an HTTP 411 (Length Required) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema411 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema411 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response411 a : responseCodes) +addResponseSchema411 = + addResponseSchema @"411" + {- | Appends an HTTP 411 (Length Required) document response to the set of possible responses. @@ -2284,7 +2873,7 @@ possible responses. @ responseBodies - . addResponseBody412 myTypeEncoderFn + . addResponseBody412 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2302,6 +2891,27 @@ addResponseBody412 :: addResponseBody412 = addResponseBody @"412" +{- | Appends an HTTP 412 (Precondition Failed) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema412 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema412 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response412 a : responseCodes) +addResponseSchema412 = + addResponseSchema @"412" + {- | Appends an HTTP 412 (Precondition Failed) document response to the set of possible responses. @@ -2329,7 +2939,7 @@ possible responses. @ responseBodies - . addResponseBody413 myTypeEncoderFn + . addResponseBody413 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2347,6 +2957,27 @@ addResponseBody413 :: addResponseBody413 = addResponseBody @"413" +{- | Appends an HTTP 413 (Payload Too Large) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema413 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema413 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response413 a : responseCodes) +addResponseSchema413 = + addResponseSchema @"413" + {- | Appends an HTTP 413 (Payload Too Large) document response to the set of possible responses. @@ -2374,7 +3005,7 @@ responses. @ responseBodies - . addResponseBody414 myTypeEncoderFn + . addResponseBody414 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2392,6 +3023,27 @@ addResponseBody414 :: addResponseBody414 = addResponseBody @"414" +{- | Appends an HTTP 414 (URI Too Long) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema414 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema414 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response414 a : responseCodes) +addResponseSchema414 = + addResponseSchema @"414" + {- | Appends an HTTP 414 (URI Too Long) document response to the set of possible responses. @@ -2419,7 +3071,7 @@ possible responses. @ responseBodies - . addResponseBody415 myTypeEncoderFn + . addResponseBody415 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2437,6 +3089,27 @@ addResponseBody415 :: addResponseBody415 = addResponseBody @"415" +{- | Appends an HTTP 415 (Unsupported Media Type) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema415 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema415 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response415 a : responseCodes) +addResponseSchema415 = + addResponseSchema @"415" + {- | Appends an HTTP 415 (Unsupported Media Type) document response to the set of possible responses. @@ -2464,7 +3137,7 @@ possible responses. @ responseBodies - . addResponseBody416 myTypeEncoderFn + . addResponseBody416 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2482,6 +3155,27 @@ addResponseBody416 :: addResponseBody416 = addResponseBody @"416" +{- | Appends an HTTP 416 (Range Not Satisfiable) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema416 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema416 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response416 a : responseCodes) +addResponseSchema416 = + addResponseSchema @"416" + {- | Appends an HTTP 416 (Range Not Satisfiable) document response to the set of possible responses. @@ -2509,7 +3203,7 @@ possible responses. @ responseBodies - . addResponseBody417 myTypeEncoderFn + . addResponseBody417 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2527,6 +3221,27 @@ addResponseBody417 :: addResponseBody417 = addResponseBody @"417" +{- | Appends an HTTP 417 (Expectation Failed) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema417 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema417 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response417 a : responseCodes) +addResponseSchema417 = + addResponseSchema @"417" + {- | Appends an HTTP 417 (Expectation Failed) document response to the set of possible responses. @@ -2554,7 +3269,7 @@ responses. @ responseBodies - . addResponseBody418 myTypeEncoderFn + . addResponseBody418 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2572,6 +3287,27 @@ addResponseBody418 :: addResponseBody418 = addResponseBody @"418" +{- | Appends an HTTP 418 (I'm a Teapot) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema418 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema418 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response418 a : responseCodes) +addResponseSchema418 = + addResponseSchema @"418" + {- | Appends an HTTP 418 (I'm a Teapot) document response to the set of possible responses. @@ -2599,7 +3335,7 @@ possible responses. @ responseBodies - . addResponseBody422 myTypeEncoderFn + . addResponseBody422 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2617,6 +3353,27 @@ addResponseBody422 :: addResponseBody422 = addResponseBody @"422" +{- | Appends an HTTP 422 (Unprocessable Entity) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema422 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema422 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response422 a : responseCodes) +addResponseSchema422 = + addResponseSchema @"422" + {- | Appends an HTTP 422 (Unprocessable Entity) document response to the set of possible responses. @@ -2644,7 +3401,7 @@ possible responses. @ responseBodies - . addResponseBody428 myTypeEncoderFn + . addResponseBody428 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2662,6 +3419,27 @@ addResponseBody428 :: addResponseBody428 = addResponseBody @"428" +{- | Appends an HTTP 428 (Precondition Required) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema428 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema428 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response428 a : responseCodes) +addResponseSchema428 = + addResponseSchema @"428" + {- | Appends an HTTP 428 (Precondition Required) document response to the set of possible responses. @@ -2689,7 +3467,7 @@ possible responses. @ responseBodies - . addResponseBody429 myTypeEncoderFn + . addResponseBody429 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2707,6 +3485,27 @@ addResponseBody429 :: addResponseBody429 = addResponseBody @"429" +{- | Appends an HTTP 429 (Too Many Requests) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema429 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema429 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response429 a : responseCodes) +addResponseSchema429 = + addResponseSchema @"429" + {- | Appends an HTTP 429 (Too Many Requests) document response to the set of possible responses. @@ -2734,7 +3533,7 @@ the set of possible responses. @ responseBodies - . addResponseBody431 myTypeEncoderFn + . addResponseBody431 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2752,6 +3551,27 @@ addResponseBody431 :: addResponseBody431 = addResponseBody @"431" +{- | Appends an HTTP 431 (Request Header Fields Too Large) Fleece response to +the set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema431 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema431 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response431 a : responseCodes) +addResponseSchema431 = + addResponseSchema @"431" + {- | Appends an HTTP 431 (Request Header Fields Too Large) document response to the set of possible responses. @@ -2779,7 +3599,7 @@ possible responses. @ responseBodies - . addResponseBody500 myTypeEncoderFn + . addResponseBody500 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2797,6 +3617,27 @@ addResponseBody500 :: addResponseBody500 = addResponseBody @"500" +{- | Appends an HTTP 500 (Internal Server Error) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema500 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema500 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response500 a : responseCodes) +addResponseSchema500 = + addResponseSchema @"500" + {- | Appends an HTTP 500 (Internal Server Error) document response to the set of possible responses. @@ -2824,7 +3665,7 @@ possible responses. @ responseBodies - . addResponseBody501 myTypeEncoderFn + . addResponseBody501 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2842,6 +3683,27 @@ addResponseBody501 :: addResponseBody501 = addResponseBody @"501" +{- | Appends an HTTP 501 (Not Implemented) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema501 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema501 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response501 a : responseCodes) +addResponseSchema501 = + addResponseSchema @"501" + {- | Appends an HTTP 501 (Not Implemented) document response to the set of possible responses. @@ -2869,7 +3731,7 @@ responses. @ responseBodies - . addResponseBody502 myTypeEncoderFn + . addResponseBody502 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2887,6 +3749,27 @@ addResponseBody502 :: addResponseBody502 = addResponseBody @"502" +{- | Appends an HTTP 502 (Bad Gateway) Fleece response to the set of possible +responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema502 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema502 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response502 a : responseCodes) +addResponseSchema502 = + addResponseSchema @"502" + {- | Appends an HTTP 502 (Bad Gateway) document response to the set of possible responses. @@ -2914,7 +3797,7 @@ possible responses. @ responseBodies - . addResponseBody503 myTypeEncoderFn + . addResponseBody503 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2932,6 +3815,27 @@ addResponseBody503 :: addResponseBody503 = addResponseBody @"503" +{- | Appends an HTTP 503 (Service Unavailable) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema503 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema503 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response503 a : responseCodes) +addResponseSchema503 = + addResponseSchema @"503" + {- | Appends an HTTP 503 (Service Unavailable) document response to the set of possible responses. @@ -2959,7 +3863,7 @@ possible responses. @ responseBodies - . addResponseBody504 myTypeEncoderFn + . addResponseBody504 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -2977,6 +3881,27 @@ addResponseBody504 :: addResponseBody504 = addResponseBody @"504" +{- | Appends an HTTP 504 (Gateway Timeout) Fleece response to the set of +possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema504 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema504 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response504 a : responseCodes) +addResponseSchema504 = + addResponseSchema @"504" + {- | Appends an HTTP 504 (Gateway Timeout) document response to the set of possible responses. @@ -3004,7 +3929,7 @@ of possible responses. @ responseBodies - . addResponseBody505 myTypeEncoderFn + . addResponseBody505 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -3022,6 +3947,27 @@ addResponseBody505 :: addResponseBody505 = addResponseBody @"505" +{- | Appends an HTTP 505 (HTTP Version Not Supported) Fleece response to the +set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema505 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema505 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response505 a : responseCodes) +addResponseSchema505 = + addResponseSchema @"505" + {- | Appends an HTTP 505 (HTTP Version Not Supported) document response to the set of possible responses. @@ -3049,7 +3995,7 @@ the set of possible responses. @ responseBodies - . addResponseBody511 myTypeEncoderFn + . addResponseBody511 myContentType myTypeEncoderFn $ noResponseBodies @ @@ -3067,6 +4013,27 @@ addResponseBody511 :: addResponseBody511 = addResponseBody @"511" +{- | Appends an HTTP 511 (Network Authentication Required) Fleece response to +the set of possible responses. + +/Example usage/: + +@ +responseBodies + . addResponseSchema511 myTypeSchema + $ noResponseBodies +@ + +@since 0.1.0 +-} +addResponseSchema511 :: + forall a responseCodes. + (forall schema. FC.Fleece schema => schema a) -> + ResponseBodiesBuilder responseCodes -> + ResponseBodiesBuilder (Response511 a : responseCodes) +addResponseSchema511 = + addResponseSchema @"511" + {- | Appends an HTTP 511 (Network Authentication Required) document response to the set of possible responses.