From 8a6ee9bca902db076be12745967a69c7c184e044 Mon Sep 17 00:00:00 2001 From: Jake Swenson Date: Fri, 14 May 2021 07:33:45 -0700 Subject: split models --- src/models/text.rs | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/models/text.rs (limited to 'src/models/text.rs') diff --git a/src/models/text.rs b/src/models/text.rs new file mode 100644 index 0000000..0baf183 --- /dev/null +++ b/src/models/text.rs @@ -0,0 +1,79 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +#[serde(rename_all = "snake_case")] +pub enum TextColor { + Default, + Gray, + Brown, + Orange, + Yellow, + Green, + Blue, + Purple, + Pink, + Red, + GrayBackground, + BrownBackground, + OrangeBackground, + YellowBackground, + GreenBackground, + BlueBackground, + PurpleBackground, + PinkBackground, + RedBackground, +} + +/// Rich text annotations +/// See https://developers.notion.com/reference/rich-text#annotations +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +struct Annotations { + bold: bool, + code: bool, + color: TextColor, + italic: bool, + strikethrough: bool, + underline: bool, +} + +/// Properties common on all rich text objects +/// See https://developers.notion.com/reference/rich-text#all-rich-text +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +pub struct RichTextCommon { + plain_text: String, + href: Option, + annotations: Annotations, +} + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +pub struct Link { + url: String, +} + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +pub struct Text { + content: String, + link: Option, +} + +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +#[serde(tag = "type")] +#[serde(rename_all = "snake_case")] +pub enum RichText { + /// See https://developers.notion.com/reference/rich-text#text-objects + Text { + #[serde(flatten)] + rich_text: RichTextCommon, + text: Text, + }, + /// See https://developers.notion.com/reference/rich-text#mention-objects + Mention { + #[serde(flatten)] + rich_text: RichTextCommon, + }, + /// See https://developers.notion.com/reference/rich-text#equation-objects + Equation { + #[serde(flatten)] + rich_text: RichTextCommon, + }, +} -- cgit v1.2.3