diff options
author | 2021-05-14 07:33:45 -0700 | |
---|---|---|
committer | 2021-05-14 07:33:45 -0700 | |
commit | 8a6ee9bca902db076be12745967a69c7c184e044 (patch) | |
tree | 480244bde1110a33bf4bcd7f18b2406ff7bc8571 /src/models.rs | |
parent | b22ae2cf8a9e2b6af1a54f79ecdb31ad4d2c31c5 (diff) | |
download | notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.gz notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.zst notion-8a6ee9bca902db076be12745967a69c7c184e044.zip |
split models
Diffstat (limited to 'src/models.rs')
-rw-r--r-- | src/models.rs | 165 |
1 files changed, 4 insertions, 161 deletions
diff --git a/src/models.rs b/src/models.rs index cfb43d9..4d43a3f 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,5 +1,9 @@ +pub mod properties; pub mod search; +pub mod text; +use crate::models::properties::PropertyConfiguration; +use crate::models::text::RichText; use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -47,164 +51,3 @@ pub struct ListResponse<T> { next_cursor: Option<String>, has_more: bool, } - -#[derive(Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -#[serde(transparent)] -struct PropertyId(String); - -/// How the number is displayed in Notion. -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] -#[serde(tag = "type")] -#[serde(rename_all = "snake_case")] -enum NumberFormat { - Number, - NumberWithCommas, - Percent, - Dollar, - Euro, - Pound, - Yen, - Ruble, - Rupee, - Won, - Yuan, -} - -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] -#[serde(transparent)] -pub struct SelectOptionId(String); - -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] -#[serde(rename_all = "lowercase")] -pub enum Color { - Default, - Gray, - Brown, - Orange, - Yellow, - Green, - Blue, - Purple, - Pink, - Red, -} - -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] -pub struct SelectOption { - name: String, - id: SelectOptionId, - color: Color, -} - -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] -pub struct Select { - /// Sorted list of options available for this property. - options: Vec<SelectOption>, -} - -#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] -#[serde(tag = "type")] -#[serde(rename_all = "snake_case")] -pub enum PropertyConfiguration { - /// Represents the special Title property required on every database. - /// See https://developers.notion.com/reference/database#title-configuration - Title { id: PropertyId }, - /// Represents a Text property - /// https://developers.notion.com/reference/database#text-configuration - #[serde(rename = "rich_text")] - Text { id: PropertyId }, - /// Represents a Number Property - /// See https://developers.notion.com/reference/database#number-configuration - Number { - id: PropertyId, - /// How the number is displayed in Notion. - format: NumberFormat, - }, - /// Represents a Select Property - /// See https://developers.notion.com/reference/database#select-configuration - Select { id: PropertyId, select: Select }, - /// Represents a Date Property - /// See https://developers.notion.com/reference/database#date-configuration - Date { id: PropertyId }, - /// Represents a File Property - /// See https://developers.notion.com/reference/database#date-configuration - File { id: PropertyId }, -} - -#[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)] -struct RichTextCommon { - plain_text: String, - href: Option<String>, - 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<String>, -} - -#[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, - }, -} |