0 | module HTTP.Header.Types
2 | import Data.ByteString
3 | import Data.SortedMap
4 | import Derive.Prelude
7 | %language ElabReflection
10 | data Parameter : Type where
11 | P : (name, value : String) -> Parameter
12 | Q : Double -> Parameter
14 | %runElab derive "Parameter" [Show,Eq]
18 | Parameters = List Parameter
21 | parameter : String -> Parameters -> Maybe String
22 | parameter s (P n v :: xs) = if s == n then Just v else parameter s xs
23 | parameter s _ = Nothing
26 | weight : Parameters -> Double
27 | weight (Q v :: xs) = v
28 | weight (P _ _ :: xs) = weight xs
32 | data MediaDesc : Type where
34 | MDStar : (type : String) -> MediaDesc
35 | MD : (type, subtype : String) -> MediaDesc
37 | %runElab derive "MediaDesc" [Show,Eq]
40 | record MediaRange where
45 | %runElab derive "MediaRange" [Show,Eq]
48 | record MediaType where
54 | encodeMediaType : MediaType -> ByteString
55 | encodeMediaType (MT t s) = fromString "\{t}/\{s}"
57 | %runElab derive "MediaType" [Show,Eq]
60 | record ContentType where
65 | %runElab derive "ContentType" [Show,Eq]
68 | accepts : MediaDesc -> MediaType -> Bool
69 | accepts MDAny _ = True
70 | accepts (MDStar type) t = type == t.type
71 | accepts (MD type subtype) t = type == t.type && subtype == t.subtype
74 | 0 MediaRanges : Type
75 | MediaRanges = List MediaRange
78 | record ContentDisp where
83 | %runElab derive "ContentDisp" [Show,Eq]
87 | HeaderMap = SortedMap String ByteString