0 | module HTTP.API.Server.Header
 1 |
 2 | import HTTP.API.Server.Interface
 3 |
 4 | %default total
 5 |
 6 | decodeHeaders :
 7 |      (ps : List HeaderPart)
 8 |   -> {auto all : All Decode (HeaderTypes ps)}
 9 |   -> Request
10 |   -> Either RequestErr (HList $ HeaderTypes ps)
11 | decodeHeaders []             r = Right []
12 | decodeHeaders (H n t s::hs) @{_::_} r =
13 |   case lookupHeader n r.headers of
14 |     Nothing => Left (requestErrMsg "Missing HTTP header: \{n}" s)
15 |     Just bs => Prelude.do
16 |       v  <- mapFst (decodeErr s) (decodeAs t bs)
17 |       vs <- decodeHeaders hs r
18 |       pure $ v::vs
19 |
20 | public export
21 | Serve ReqHeaders where
22 |   Constraint h         = All Decode (HeaderTypes h.headers)
23 |   InTypes  h           = HeaderTypes h.headers
24 |   OutTypes _           = []
25 |   outs     _           = []
26 |   canHandle   _ r      = True
27 |   fromRequest h r      = injectEither $ decodeHeaders h.headers r
28 |   adjResponse _ [] req = pure
29 |