0 | module HTTP.API.Encode
2 | import Data.List.Quantifiers as L
4 | import public Data.ByteString
5 | import public HTTP.Header.Types
16 | interface Encode (0 a : Type) where
17 | encode : a -> ByteString
21 | interface EncodeMany (0 a : Type) where
22 | encodeMany : a -> List ByteString
25 | Encode a => EncodeMany a where
26 | encodeMany v = [encode v]
29 | {auto all : L.All.All (EncodeMany . f) ts}
33 | encodeHL @{_ :: _} (x::xs) = encodeMany x ++ encodeHL xs
36 | L.All.All (EncodeMany . f) ts => EncodeMany (L.All.All f ts) where
37 | encodeMany = encodeHL
39 | encodeList : EncodeMany t => List t -> List ByteString
41 | encodeList (x::xs) = encodeMany x ++ encodeList xs
44 | EncodeMany a => EncodeMany (Vect n a) where
45 | encodeMany = encodeList . toList
48 | EncodeMany a => EncodeMany (List a) where
49 | encodeMany = encodeList
52 | EncodeMany a => EncodeMany (SnocList a) where
53 | encodeMany = encodeList . (<>> [])
69 | OctettList = List ByteString
72 | interface EncodeVia (0 from, to : Type) where
73 | encodeAs : from -> to
74 | toBytes : to -> List ByteString
75 | mediaType : MediaType
78 | encodeVia : (v : f) -> EncodeVia f t -> List ByteString
79 | encodeVia v c = toBytes @{c} $
encodeAs @{c} v
82 | Interpolation a => EncodeVia a String where
83 | encodeAs = interpolate
84 | toBytes = pure . fromString
85 | mediaType = MT "text" "plain"
88 | Cast a ByteString => EncodeVia a ByteString where
91 | mediaType = MT "application" "octett-stream"
94 | Cast a (List ByteString) => EncodeVia a (List ByteString) where
97 | mediaType = MT "application" "octett-stream"
100 | ToJSON a => EncodeVia a JSON where
102 | toBytes = pure . fromString . show
103 | mediaType = MT "application" "json"
110 | Encode ByteString where encode = id
113 | Encode String where encode = fromString
117 | encode = encode . show
120 | Encode Integer where
121 | encode = encode. show
125 | encode = encode. show
128 | Encode Bits16 where
129 | encode = encode. show
132 | Encode Bits32 where
133 | encode = encode. show
136 | Encode Bits64 where
137 | encode = encode. show
141 | encode = encode. show
145 | encode = encode. show
149 | encode = encode. show
153 | encode = encode. show
156 | Encode Double where
157 | encode = encode. show