0 | module HTTP.API.Server.Header
2 | import HTTP.API.Server.Interface
6 | parameters {auto loc : HTTPLocal}
8 | (ps : List HeaderPart)
9 | -> {auto all : All Decode (HeaderTypes ps)}
11 | -> Either RequestErr (HList $
HeaderTypes ps)
12 | decodeHeaders [] r = Right []
13 | decodeHeaders (H n t s::hs) @{_::_} r =
14 | case lookupHeader n r.headers of
15 | Nothing => Left (requestErrMsg (missingHeader n) s)
16 | Just bs => Prelude.do
17 | v <- mapFst (decodeErr s) (decodeAs t bs)
18 | vs <- decodeHeaders hs r
22 | Serve ReqHeaders where
23 | Constraint h = All Decode (HeaderTypes h.headers)
24 | InTypes h = HeaderTypes h.headers
27 | canHandle _ r = True
28 | fromRequest h r = injectEither $
decodeHeaders h.headers r
29 | adjResponse _ [] req = pure