From b9ee77f8153090e9d47e73ab195540d10720c7b6 Mon Sep 17 00:00:00 2001 From: Adelyn Breelove Date: Thu, 10 Jan 2019 13:12:49 -0700 Subject: AAAAAAAAAAAAAAAAAAAAAAAA --- lib/models/channel_t.ml | 121 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 lib/models/channel_t.ml (limited to 'lib/models/channel_t.ml') diff --git a/lib/models/channel_t.ml b/lib/models/channel_t.ml new file mode 100644 index 0000000..df3e929 --- /dev/null +++ b/lib/models/channel_t.ml @@ -0,0 +1,121 @@ +open Core + +exception Invalid_channel of Yojson.Safe.json + +type group = { + id: Snowflake.t; + last_message_id: Snowflake.t option [@default None]; + last_pin_timestamp: string option [@default None]; + icon: string option [@default None]; + name: string option [@default None]; + owner_id: Snowflake.t; + recipients: User_t.t list [@default []]; +} [@@deriving yojson] + +type dm = { + id: Snowflake.t; + last_message_id: Snowflake.t option [@default None]; + last_pin_timestamp: string option [@default None]; +} [@@deriving yojson] + +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; + name: string; + position: int; + topic: string option [@default None]; + nsfw: bool; + slow_mode_timeout: int option [@default None]; +} [@@deriving yojson] + +type guild_voice = { + id: Snowflake.t; + category_id: Snowflake.t option [@default None][@key "parent_id"]; + guild_id: Snowflake.t; + name: string; + position: int; + user_limit: int [@default -1]; + bitrate: int option [@default None]; +} [@@deriving yojson] + +type category = { + id: Snowflake.t; + guild_id: Snowflake.t; + position: int; + name: string; +} [@@deriving yojson] + +type t = +| Group of group +| Private of dm +| GuildText of guild_text +| GuildVoice of guild_voice +| Category of category +[@@deriving yojson] + +type channel_wrapper = { + id: Snowflake.t; + kind: int [@key "type"]; + guild_id: Snowflake.t option [@default None]; + position: int option [@default None]; + name: string option [@default None]; + topic: string option [@default None]; + nsfw: bool option [@default None]; + last_message_id: Snowflake.t option [@default None]; + bitrate: int option [@default None]; + user_limit: int option [@default None]; + slow_mode_timeout: int option [@default None]; + recipients: User_t.t list option [@default None]; + icon: string option [@default None]; + owner_id: Snowflake.t option [@default None]; + 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] + +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 + { 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 + { id; guild_id; position; name; user_limit; bitrate ; category_id; } + +let unwrap_as_dm {id;last_message_id;last_pin_timestamp;_} = + { id; last_message_id; last_pin_timestamp; } + +let unwrap_as_group {id;name;last_message_id;recipients;icon;owner_id;last_pin_timestamp;_} = + let recipients = Option.value ~default:[] recipients in + let owner_id = Option.value_exn owner_id in + { 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; } + +let wrap s = + match s.kind with + | 0 -> GuildText (unwrap_as_guild_text s) + | 1 -> Private (unwrap_as_dm s) + | 2 -> GuildVoice (unwrap_as_guild_voice s) + | 3 -> Group (unwrap_as_group s) + | 4 -> Category (unwrap_as_category s) + | _ -> raise (Invalid_channel (channel_wrapper_to_yojson s)) + +let get_id = function +| Group g -> g.id +| Private p -> p.id +| GuildText t -> t.id +| GuildVoice v -> v.id +| Category c -> c.id \ No newline at end of file -- cgit v1.2.3 From b7f8f0de01c5014703376d7204b62d8e47c9179a Mon Sep 17 00:00:00 2001 From: Adelyn Breelove Date: Thu, 10 Jan 2019 16:15:20 -0700 Subject: Fix some deserializing bits --- lib/models/channel_t.ml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'lib/models/channel_t.ml') 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; } -- cgit v1.2.3 From c5bfc108ca6a1e7a21492b4318de78a74ed801f9 Mon Sep 17 00:00:00 2001 From: Adelyn Breedlove Date: Sun, 13 Jan 2019 16:51:04 -0700 Subject: Add deriving sexp to models --- lib/models/channel_t.ml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib/models/channel_t.ml') diff --git a/lib/models/channel_t.ml b/lib/models/channel_t.ml index 2fd2e5a..dce1d54 100644 --- a/lib/models/channel_t.ml +++ b/lib/models/channel_t.ml @@ -10,13 +10,13 @@ type group = { name: string option [@default None]; owner_id: Snowflake.t; recipients: User_t.t list [@default []]; -} [@@deriving yojson { strict = false}] +} [@@deriving sexp, 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 { strict = false}] +} [@@deriving sexp, yojson { strict = false}] type guild_text = { id: Snowflake.t; @@ -29,7 +29,7 @@ type guild_text = { topic: string option [@default None]; nsfw: bool; slow_mode_timeout: int option [@default None]; -} [@@deriving yojson { strict = false}] +} [@@deriving sexp, yojson { strict = false}] type guild_voice = { id: Snowflake.t; @@ -39,14 +39,14 @@ type guild_voice = { position: int; user_limit: int [@default -1]; bitrate: int option [@default None]; -} [@@deriving yojson { strict = false}] +} [@@deriving sexp, yojson { strict = false}] type category = { id: Snowflake.t; guild_id: Snowflake.t option [@default None]; position: int; name: string; -} [@@deriving yojson { strict = false}] +} [@@deriving sexp, 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 { strict = false}] +[@@deriving sexp, yojson { strict = false}] type channel_wrapper = { id: Snowflake.t; @@ -74,7 +74,7 @@ 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 { strict = false}] +} [@@deriving sexp, 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 position = Option.value_exn position in -- cgit v1.2.3