aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jake Swenson <jake@jakeswenson.com> 2021-05-14 07:33:45 -0700
committerGravatar Jake Swenson <jake@jakeswenson.com> 2021-05-14 07:33:45 -0700
commit8a6ee9bca902db076be12745967a69c7c184e044 (patch)
tree480244bde1110a33bf4bcd7f18b2406ff7bc8571 /src
parentb22ae2cf8a9e2b6af1a54f79ecdb31ad4d2c31c5 (diff)
downloadnotion-8a6ee9bca902db076be12745967a69c7c184e044.tar.gz
notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.zst
notion-8a6ee9bca902db076be12745967a69c7c184e044.zip
split models
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs15
-rw-r--r--src/models.rs165
-rw-r--r--src/models/properties.rs84
-rw-r--r--src/models/search.rs1
-rw-r--r--src/models/text.rs79
5 files changed, 175 insertions, 169 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 53e639f..7fbaa15 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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,
+ },
+}