-
Notifications
You must be signed in to change notification settings - Fork 1
/
request_ext.gleam
47 lines (42 loc) · 1.13 KB
/
request_ext.gleam
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import gleam/list
import gleam/option.{type Option}
import gleam/string
import gleam/http.{type Header}
import gleam/http/request.{type Request, Request}
pub fn merge_headers(
request: Request(data),
into base: List(Header),
from overrides: List(Header),
) -> Request(data) {
request
|> set_headers(base)
|> set_headers(overrides)
}
/// Set a request's headers using a list.
///
/// Similar to `set_header` but for setting more than a single header at once.
/// Existing headers on the request will be replaced.
pub fn set_headers(
request: Request(body),
headers: List(#(String, String)),
) -> Request(body) {
let new_headers =
list.fold(headers, request.headers, fn(acc, header) {
list.key_set(acc, string.lowercase(header.0), header.1)
})
Request(..request, headers: new_headers)
}
pub fn set_header(
request: Request(body),
header: #(String, String),
) -> Request(body) {
let key = string.lowercase(header.0)
let value = header.1
request.set_header(request, key, value)
}
pub fn set_query_string(
request: Request(body),
query: Option(String),
) -> Request(body) {
Request(..request, query: query)
}