-
Notifications
You must be signed in to change notification settings - Fork 1
/
condition.gleam
63 lines (59 loc) · 2.01 KB
/
condition.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
import gleam/dynamic.{type Decoder}
import gleam/json.{type DecodeError as JsonDecodeError, type Json}
import gleam/option.{type Option}
import glitch/extended/json_ext
pub type Condition {
Condition(
broadcaster_user_id: Option(String),
from_broadcaster_id: Option(String),
moderator_user_id: Option(String),
to_broadcaster_id_user_id: Option(String),
reward_id: Option(String),
client_id: Option(String),
extension_client_id: Option(String),
user_id: Option(String),
)
}
pub fn decoder() -> Decoder(Condition) {
dynamic.decode8(
Condition,
dynamic.optional_field("broadcaster_user_id", dynamic.string),
dynamic.optional_field("from_broadcaster_id", dynamic.string),
dynamic.optional_field("moderator_user_id", dynamic.string),
dynamic.optional_field("to_broadcaster_id_user_id", dynamic.string),
dynamic.optional_field("reward_id", dynamic.string),
dynamic.optional_field("client_id", dynamic.string),
dynamic.optional_field("extension_client_id", dynamic.string),
dynamic.optional_field("user_id", dynamic.string),
)
}
pub fn from_json(json_string: String) -> Result(Condition, JsonDecodeError) {
json.decode(json_string, decoder())
}
pub fn to_json(transport: Condition) -> Json {
json.object([
#(
"broadcaster_user_id",
json_ext.option(transport.broadcaster_user_id, json.string),
),
#(
"from_broadcaster_id",
json_ext.option(transport.from_broadcaster_id, json.string),
),
#(
"moderator_user_id",
json_ext.option(transport.moderator_user_id, json.string),
),
#(
"to_broadcaster_id_user_id",
json_ext.option(transport.to_broadcaster_id_user_id, json.string),
),
#("reward_id", json_ext.option(transport.reward_id, json.string)),
#("client_id", json_ext.option(transport.client_id, json.string)),
#(
"extension_client_id",
json_ext.option(transport.extension_client_id, json.string),
),
#("user_id", json_ext.option(transport.user_id, json.string)),
])
}