-
Notifications
You must be signed in to change notification settings - Fork 1
/
api_request.gleam
153 lines (133 loc) · 3.82 KB
/
api_request.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
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import gleam/http.{type Header, Https}
import gleam/http/request.{type Request, Request}
import glitch/extended/request_ext
pub opaque type TwitchApiRequest {
HelixApiRequest(Request(String))
AuthApiRequest(Request(String))
}
const api_host = "api.twitch.tv/helix"
const id_api_host = "id.twitch.tv"
fn api_request_from_request(request: Request(String)) -> TwitchApiRequest {
HelixApiRequest(request)
}
fn auth_request_from_request(request: Request(String)) -> TwitchApiRequest {
AuthApiRequest(request)
}
pub fn new_helix_request() -> TwitchApiRequest {
request.new()
|> request.set_scheme(Https)
|> request.set_host(api_host)
|> api_request_from_request
}
pub fn new_auth_request() -> TwitchApiRequest {
request.new()
|> request.set_scheme(Https)
|> request.set_host(id_api_host)
|> auth_request_from_request
}
pub fn to_http_request(request: TwitchApiRequest) -> Request(String) {
case request {
HelixApiRequest(http_request) -> http_request
AuthApiRequest(http_request) -> http_request
}
}
pub fn is_auth_request(request: TwitchApiRequest) -> Bool {
case request {
HelixApiRequest(_) -> False
AuthApiRequest(_) -> True
}
}
pub fn is_helix_request(request: TwitchApiRequest) -> Bool {
case request {
HelixApiRequest(_) -> True
AuthApiRequest(_) -> False
}
}
pub fn headers(request: TwitchApiRequest) -> List(Header) {
to_http_request(request).headers
}
pub fn set_headers(
request: TwitchApiRequest,
headers: List(Header),
) -> TwitchApiRequest {
let set_headers_internal = fn(request, headers) {
request
|> to_http_request
|> request_ext.set_headers(headers)
}
case request {
HelixApiRequest(_) as http_request ->
http_request
|> set_headers_internal(headers)
|> HelixApiRequest
AuthApiRequest(_) as http_request ->
http_request
|> set_headers_internal(headers)
|> AuthApiRequest
}
}
pub fn set_header(request, header) -> TwitchApiRequest {
let set_header_internal = fn(request, header) {
request
|> to_http_request
|> request_ext.set_header(header)
}
case request {
HelixApiRequest(_) as http_request ->
http_request
|> set_header_internal(header)
|> HelixApiRequest
AuthApiRequest(_) as http_request ->
http_request
|> set_header_internal(header)
|> AuthApiRequest
}
}
pub fn merge_headers(
request: TwitchApiRequest,
into base: List(Header),
from overrides: List(Header),
) -> TwitchApiRequest {
case request {
HelixApiRequest(http_request) ->
HelixApiRequest(request_ext.merge_headers(http_request, base, overrides))
AuthApiRequest(http_request) ->
AuthApiRequest(request_ext.merge_headers(http_request, base, overrides))
}
}
pub fn set_method(request, method) -> TwitchApiRequest {
case request {
HelixApiRequest(http_request) ->
HelixApiRequest(Request(..http_request, method: method))
AuthApiRequest(http_request) ->
AuthApiRequest(Request(..http_request, method: method))
}
}
pub fn set_query(request, query_params) -> TwitchApiRequest {
case request {
HelixApiRequest(http_request) ->
http_request
|> request.set_query(query_params)
|> HelixApiRequest
AuthApiRequest(http_request) ->
http_request
|> request.set_query(query_params)
|> AuthApiRequest
}
}
pub fn set_body(request, body) -> TwitchApiRequest {
case request {
HelixApiRequest(http_request) ->
HelixApiRequest(Request(..http_request, body: body))
AuthApiRequest(http_request) ->
AuthApiRequest(Request(..http_request, body: body))
}
}
pub fn set_path(request, path) -> TwitchApiRequest {
case request {
HelixApiRequest(http_request) ->
HelixApiRequest(Request(..http_request, path: path))
AuthApiRequest(http_request) ->
AuthApiRequest(Request(..http_request, path: path))
}
}