0 | module HTTP.API.Server.Content
2 | import HTTP.API.Server.Interface
6 | decodeBody : All (`DecodeVia` t) ts -> Request -> Either RequestErr (HList [t])
7 | decodeBody [] r = Left $
requestErr unsupportedMediaType415
8 | decodeBody (d :: ds) r =
9 | case contentType r.headers of
10 | Nothing => decodeBody ds r
11 | Just (CT mt ps) => case mt == mediaType @{d} of
12 | False => decodeBody ds r
15 | (decodeErr badRequest400)
17 | (decodeVia @{d} ps r.content)
20 | Serve ReqContent where
21 | Constraint b = All (`DecodeVia` b.result) b.formats
22 | InTypes b = [b.result]
25 | canHandle _ r = True
26 | fromRequest _ r = injectEither $
decodeBody con r
27 | adjResponse _ [] req = pure