diff options
author | 2021-05-14 07:33:45 -0700 | |
---|---|---|
committer | 2021-05-14 07:33:45 -0700 | |
commit | 8a6ee9bca902db076be12745967a69c7c184e044 (patch) | |
tree | 480244bde1110a33bf4bcd7f18b2406ff7bc8571 /src | |
parent | b22ae2cf8a9e2b6af1a54f79ecdb31ad4d2c31c5 (diff) | |
download | notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.gz notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.zst notion-8a6ee9bca902db076be12745967a69c7c184e044.zip |
split models
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 15 | ||||
-rw-r--r-- | src/models.rs | 165 | ||||
-rw-r--r-- | src/models/properties.rs | 84 | ||||
-rw-r--r-- | src/models/search.rs | 1 | ||||
-rw-r--r-- | src/models/text.rs | 79 |
5 files changed, 175 insertions, 169 deletions
@@ -1,6 +1,5 @@ use crate::models::search::SearchRequest; use crate::models::{Database, ListResponse}; -use std::collections::HashMap; mod models; @@ -54,11 +53,15 @@ mod tests { use crate::NotionApi; const TEST_TOKEN: &'static str = include_str!(".api_token"); + fn test_client() -> NotionApi { + NotionApi { + token: TEST_TOKEN.trim().to_string(), + } + } + #[tokio::test] async fn list_databases() -> Result<(), Box<dyn std::error::Error>> { - let api = NotionApi { - token: TEST_TOKEN.to_string(), - }; + let api = test_client(); dbg!(api.list_databases().await?); @@ -67,9 +70,7 @@ mod tests { #[tokio::test] async fn search() -> Result<(), Box<dyn std::error::Error>> { - let api = NotionApi { - token: TEST_TOKEN.to_string(), - }; + let api = test_client(); dbg!( api.search(NotionSearch::Filter { 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, - }, -} diff --git a/src/models/properties.rs b/src/models/properties.rs new file mode 100644 index 0000000..cc59907 --- /dev/null +++ b/src/models/properties.rs @@ -0,0 +1,84 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +#[serde(transparent)] +pub struct PropertyId(String); + +/// How the number is displayed in Notion. +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq)] +#[serde(tag = "type")] +#[serde(rename_all = "snake_case")] +pub 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 }, +} diff --git a/src/models/search.rs b/src/models/search.rs index dcbd206..32989e8 100644 --- a/src/models/search.rs +++ b/src/models/search.rs @@ -1,4 +1,3 @@ -use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] 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<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, + }, +} |