diff options
| author | Adelyn Breelove <[email protected]> | 2019-01-10 16:15:20 -0700 |
|---|---|---|
| committer | Adelyn Breelove <[email protected]> | 2019-01-10 16:15:20 -0700 |
| commit | b7f8f0de01c5014703376d7204b62d8e47c9179a (patch) | |
| tree | 45904decd22a7025e6dcb4e7cdb61ab754b5fe5f /lib | |
| parent | AAAAAAAAAAAAAAAAAAAAAAAA (diff) | |
| download | disml-b7f8f0de01c5014703376d7204b62d8e47c9179a.tar.xz disml-b7f8f0de01c5014703376d7204b62d8e47c9179a.zip | |
Fix some deserializing bits
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/models/activity.ml | 2 | ||||
| -rw-r--r-- | lib/models/attachment.ml | 2 | ||||
| -rw-r--r-- | lib/models/ban_t.ml | 2 | ||||
| -rw-r--r-- | lib/models/channel_t.ml | 25 | ||||
| -rw-r--r-- | lib/models/emoji.ml | 2 | ||||
| -rw-r--r-- | lib/models/member_t.ml | 8 | ||||
| -rw-r--r-- | lib/models/message_t.ml | 2 | ||||
| -rw-r--r-- | lib/models/presence.ml | 2 | ||||
| -rw-r--r-- | lib/models/reaction_t.ml | 2 | ||||
| -rw-r--r-- | lib/models/role_t.ml | 6 | ||||
| -rw-r--r-- | lib/models/snowflake.ml | 10 | ||||
| -rw-r--r-- | lib/models/user.ml | 4 | ||||
| -rw-r--r-- | lib/models/user_t.ml | 4 |
13 files changed, 38 insertions, 33 deletions
diff --git a/lib/models/activity.ml b/lib/models/activity.ml index bd3cc4e..6193ce9 100644 --- a/lib/models/activity.ml +++ b/lib/models/activity.ml @@ -2,4 +2,4 @@ type t = { name: string; kind: int [@key "type"]; url: string [@default ""]; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/attachment.ml b/lib/models/attachment.ml index 9e72f15..5f17a16 100644 --- a/lib/models/attachment.ml +++ b/lib/models/attachment.ml @@ -6,4 +6,4 @@ type t = { proxy_url: string; height: int [@default -1]; width: int [@default -1]; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/ban_t.ml b/lib/models/ban_t.ml index 940b871..640db34 100644 --- a/lib/models/ban_t.ml +++ b/lib/models/ban_t.ml @@ -1,4 +1,4 @@ type t = { reason: string [@default ""]; user: User_t.t; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/channel_t.ml b/lib/models/channel_t.ml index df3e929..2fd2e5a 100644 --- a/lib/models/channel_t.ml +++ b/lib/models/channel_t.ml @@ -10,43 +10,43 @@ type group = { name: string option [@default None]; owner_id: Snowflake.t; recipients: User_t.t list [@default []]; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type dm = { id: Snowflake.t; last_message_id: Snowflake.t option [@default None]; last_pin_timestamp: string option [@default None]; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type guild_text = { id: Snowflake.t; last_message_id: Snowflake.t option [@default None]; last_pin_timestamp: string option [@default None]; category_id: Snowflake.t option [@default None][@key "parent_id"]; - guild_id: Snowflake.t; + guild_id: Snowflake.t option [@default None]; name: string; position: int; topic: string option [@default None]; nsfw: bool; slow_mode_timeout: int option [@default None]; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type guild_voice = { id: Snowflake.t; category_id: Snowflake.t option [@default None][@key "parent_id"]; - guild_id: Snowflake.t; + guild_id: Snowflake.t option [@default None]; name: string; position: int; user_limit: int [@default -1]; bitrate: int option [@default None]; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type category = { id: Snowflake.t; - guild_id: Snowflake.t; + guild_id: Snowflake.t option [@default None]; position: int; name: string; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type t = | Group of group @@ -54,7 +54,7 @@ type t = | GuildText of guild_text | GuildVoice of guild_voice | Category of category -[@@deriving yojson] +[@@deriving yojson { strict = false}] type channel_wrapper = { id: Snowflake.t; @@ -74,17 +74,15 @@ type channel_wrapper = { application_id: Snowflake.t option [@default None]; category_id: Snowflake.t option [@default None][@key "parent_id"]; last_pin_timestamp: string option [@default None]; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] let unwrap_as_guild_text {id;guild_id;position;name;topic;nsfw;last_message_id;slow_mode_timeout;category_id;last_pin_timestamp;_} = - let guild_id = Option.value_exn guild_id in let position = Option.value_exn position in let name = Option.value_exn name in - let nsfw = Option.value_exn nsfw in + let nsfw = Option.value ~default:false nsfw in { id; guild_id; position; name; topic; nsfw; last_message_id; slow_mode_timeout; category_id; last_pin_timestamp } let unwrap_as_guild_voice {id;guild_id;position;name;bitrate;user_limit;category_id;_} = - let guild_id = Option.value_exn guild_id in let position = Option.value_exn position in let name = Option.value_exn name in let user_limit = Option.value ~default:(-1) user_limit in @@ -99,7 +97,6 @@ let unwrap_as_group {id;name;last_message_id;recipients;icon;owner_id;last_pin_t { id; name; last_message_id; recipients; icon; owner_id; last_pin_timestamp; } let unwrap_as_category {id;guild_id;position;name;_} = - let guild_id = Option.value_exn guild_id in let position = Option.value_exn position in let name = Option.value_exn name in { id; guild_id; position; name; } diff --git a/lib/models/emoji.ml b/lib/models/emoji.ml index 5e21b37..dccdb54 100644 --- a/lib/models/emoji.ml +++ b/lib/models/emoji.ml @@ -6,4 +6,4 @@ type t = { require_colons: bool option [@default None]; managed: bool option [@default None]; animated: bool option [@default None]; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/member_t.ml b/lib/models/member_t.ml index d7ce337..4132a20 100644 --- a/lib/models/member_t.ml +++ b/lib/models/member_t.ml @@ -4,7 +4,7 @@ type partial_member = { joined_at: string; deaf: bool; mute: bool; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type member = { nick: string option [@default None]; @@ -13,12 +13,12 @@ type member = { deaf: bool; mute: bool; user: User_t.t; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type member_update = { guild_id: Snowflake.t [@key "id"]; member: member; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type t = { nick: string option [@default None]; @@ -28,7 +28,7 @@ type t = { mute: bool; user: User_t.t; guild_id: Snowflake.t; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] let wrap ~guild_id ({nick;roles;joined_at;deaf;mute;user}:member) = {nick;roles;joined_at;deaf;mute;user;guild_id}
\ No newline at end of file diff --git a/lib/models/message_t.ml b/lib/models/message_t.ml index 7ef09e9..b8aa204 100644 --- a/lib/models/message_t.ml +++ b/lib/models/message_t.ml @@ -18,4 +18,4 @@ type t = { pinned: bool; webhook_id: Snowflake.t option [@default None]; kind: int [@key "type"]; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/presence.ml b/lib/models/presence.ml index 0e715de..955a930 100644 --- a/lib/models/presence.ml +++ b/lib/models/presence.ml @@ -5,4 +5,4 @@ type t = { guild_id: Snowflake.t; status: string; activities: Activity.t list; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/reaction_t.ml b/lib/models/reaction_t.ml index 00bebe6..f60561e 100644 --- a/lib/models/reaction_t.ml +++ b/lib/models/reaction_t.ml @@ -1,4 +1,4 @@ type t = { count: int; emoji: Emoji.t; -} [@@deriving yojson]
\ No newline at end of file +} [@@deriving yojson { strict = false}]
\ No newline at end of file diff --git a/lib/models/role_t.ml b/lib/models/role_t.ml index 88b2a4e..ae54f7a 100644 --- a/lib/models/role_t.ml +++ b/lib/models/role_t.ml @@ -7,12 +7,12 @@ type role = { permissions: int; managed: bool; mentionable: bool; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type role_update = { role: role; guild_id: Snowflake.t; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type t = { id: Snowflake.t; @@ -24,7 +24,7 @@ type t = { managed: bool; mentionable: bool; guild_id: Snowflake.t; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] let wrap ~guild_id ({id;name;colour;hoist;position;permissions;managed;mentionable}:role) = {id;name;colour;hoist;position;permissions;managed;mentionable;guild_id}
\ No newline at end of file diff --git a/lib/models/snowflake.ml b/lib/models/snowflake.ml index 28b7fdb..9e630e1 100644 --- a/lib/models/snowflake.ml +++ b/lib/models/snowflake.ml @@ -1,6 +1,14 @@ open Core -type t = int [@@deriving yojson] +type t = int + +let of_yojson_exn d = Yojson.Safe.Util.to_string d |> Int.of_string |> Ok + +let of_yojson d = + try of_yojson_exn d + with Yojson.Safe.Util.Type_error (why,_) -> Error why + +let to_yojson s : Yojson.Safe.json = `String (Int.to_string s) let timestamp snowflake = let offset = (snowflake lsr 22) / 1000 in diff --git a/lib/models/user.ml b/lib/models/user.ml index b83781d..8edcea1 100644 --- a/lib/models/user.ml +++ b/lib/models/user.ml @@ -3,13 +3,13 @@ module Make(Http : S.Http) = struct include User_t let tag user = - Printf.sprintf "%s#%d" user.username user.discriminator + Printf.sprintf "%s#%s" user.username user.discriminator let mention user = Printf.sprintf "<@%d>" user.id let default_avatar user = - let avatar = user.discriminator % 5 in + let avatar = Int.of_string user.discriminator % 5 in Endpoints.cdn_default_avatar avatar let face user = match user.avatar with diff --git a/lib/models/user_t.ml b/lib/models/user_t.ml index 53b8065..9980f43 100644 --- a/lib/models/user_t.ml +++ b/lib/models/user_t.ml @@ -1,11 +1,11 @@ type partial_user = { id: Snowflake.t; -} [@@deriving yojson] +} [@@deriving yojson { strict = false}] type t = { id: Snowflake.t; username: string; - discriminator: int [@encoding `string]; + discriminator: string; avatar: string option [@default None]; bot: bool [@default false]; } [@@deriving yojson { strict = false }]
\ No newline at end of file |