-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathfetch.mbt
More file actions
87 lines (80 loc) · 1.64 KB
/
fetch.mbt
File metadata and controls
87 lines (80 loc) · 1.64 KB
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
///|
pub(all) enum HttpMethod {
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS
TRACE
CONNECT
} derive(Eq, Show)
///|
pub(all) enum FetchCredentials {
Omit
SameOrigin
Include
} derive(Eq, Show)
///|
pub fn FetchCredentials::to_string(self : FetchCredentials) -> String {
match self {
Omit => "omit"
SameOrigin => "same-origin"
Include => "include"
}
}
///|
pub(all) enum FetchMode {
Cors
NoCors
SameOrigin
Navigate
} derive(Eq, Show)
///|
pub fn FetchMode::to_string(self : FetchMode) -> String {
match self {
Cors => "cors"
NoCors => "no-cors"
SameOrigin => "same-origin"
Navigate => "navigate"
}
}
///|
pub suberror FetchError {
RequestFailed(String)
} derive(Show)
///|
fn copy_headers(headers : Map[String, String]) -> Map[String, String] {
let out : Map[String, String] = {}
headers.each(fn(k, v) { out.set(k, v) })
out
}
///|
fn prepare_fetch_payload(
body : String?,
data : &Responder?,
headers : Map[String, String]?,
) -> (String?, Map[String, String]) {
let req_headers = copy_headers(headers.unwrap_or({}))
let req_body = match body {
Some(raw_body) => Some(raw_body)
None =>
match data {
Some(responder_data) => {
let res = HttpResponse::new(OK)
responder_data.options(res)
res.headers.each(fn(k, v) {
if req_headers.get(k.to_string()) is None {
req_headers.set(k.to_string(), v.to_string())
}
})
let body_buf = @buffer.new()
responder_data.output(body_buf)
Some(body_buf.to_string())
}
None => None
}
}
(req_body, req_headers)
}