aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAdelyn Breelove <[email protected]>2019-01-10 16:15:20 -0700
committerAdelyn Breelove <[email protected]>2019-01-10 16:15:20 -0700
commitb7f8f0de01c5014703376d7204b62d8e47c9179a (patch)
tree45904decd22a7025e6dcb4e7cdb61ab754b5fe5f /lib
parentAAAAAAAAAAAAAAAAAAAAAAAA (diff)
downloaddisml-b7f8f0de01c5014703376d7204b62d8e47c9179a.tar.xz
disml-b7f8f0de01c5014703376d7204b62d8e47c9179a.zip
Fix some deserializing bits
Diffstat (limited to 'lib')
-rw-r--r--lib/models/activity.ml2
-rw-r--r--lib/models/attachment.ml2
-rw-r--r--lib/models/ban_t.ml2
-rw-r--r--lib/models/channel_t.ml25
-rw-r--r--lib/models/emoji.ml2
-rw-r--r--lib/models/member_t.ml8
-rw-r--r--lib/models/message_t.ml2
-rw-r--r--lib/models/presence.ml2
-rw-r--r--lib/models/reaction_t.ml2
-rw-r--r--lib/models/role_t.ml6
-rw-r--r--lib/models/snowflake.ml10
-rw-r--r--lib/models/user.ml4
-rw-r--r--lib/models/user_t.ml4
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