0 | module Node.HTTP2.Headers
 1 |
 2 | import Node.Internal.Support
 3 |
 4 | export
 5 | data Headers : Type where [external]
 6 |
 7 | %foreign "node:lambda: () => { return {}; }"
 8 | ffi_empty : () -> PrimIO Headers
 9 |
10 | export
11 | empty : HasIO io => io Headers
12 | empty = primIO $ ffi_empty ()
13 |
14 | %foreign "node:lambda: (name, value) => { const headers = {}; headers[name] = value; return headers; }"
15 | ffi_singleton : String -> String -> Headers
16 |
17 | export
18 | singleton : String -> String -> Headers
19 | singleton name value = ffi_singleton name value
20 |
21 | %foreign "node:lambda: (headers, name, value) => { headers[name] = value; return headers; }"
22 | ffi_setHeader : Headers -> String -> String -> PrimIO Headers
23 |
24 | export
25 | (.setHeader) : HasIO io => Headers -> String -> String -> io Headers
26 | (.setHeader) headers name value = primIO $ ffi_setHeader headers name value
27 |
28 | %foreign """
29 |   node:lambda:
30 |   (headers, name) => { 
31 |     const value = headers[name]
32 |     if (value !== undefined && value !== null) {
33 |        return _just(value)
34 |     }
35 |     return _nothing()
36 |   }
37 |   """
38 | ffi_getHeader : Headers -> String -> Maybe String
39 |
40 | export
41 | (.getHeader) : Headers -> String -> Maybe String
42 | (.getHeader) headers name = ffi_getHeader headers name
43 |
44 | %foreign "node:lambda: (headers) => __prim_js2idris_array(Object.entries(headers).map(([k,v]) => { return {h:0,a1:k,a2:v}}))"
45 | export
46 | (.asList) : Headers -> List (String, String)
47 |
48 |