aboutsummaryrefslogtreecommitdiff
path: root/src/models.rs
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/models.rs
parentb22ae2cf8a9e2b6af1a54f79ecdb31ad4d2c31c5 (diff)
downloadnotion-8a6ee9bca902db076be12745967a69c7c184e044.tar.gz
notion-8a6ee9bca902db076be12745967a69c7c184e044.tar.zst
notion-8a6ee9bca902db076be12745967a69c7c184e044.zip
split models
Diffstat (limited to 'src/models.rs')
-rw-r--r--src/models.rs165
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,
- },
-}