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/properties.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ src/models/search.rs | 1 - src/models/text.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 src/models/properties.rs create mode 100644 src/models/text.rs (limited to 'src/models') 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, +} + +#[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, + 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 red/5859'>jarred/5859 Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2022-10-17Fix error handlerGravatar Jarred Sumner 5-3/+99
2022-10-17Workaround crashGravatar Jarred Sumner 1-2/+18
2022-10-17Update websocket-server.test.tsGravatar Jarred Sumner 1-0/+41
2022-10-17Handle assertion faillureGravatar Jarred Sumner 1-1/+3
2022-10-17Implement `sendText`, `sendBinary`, `publishText`, `publishBinary`Gravatar Jarred Sumner 12-15/+917
2022-10-17Update README.mdGravatar Jarred Sumner 1-3/+11
2022-10-17Update README.mdGravatar Jarred Sumner 1-25/+25
2022-10-17Update README.mdGravatar Jarred Sumner 1-10/+35
2022-10-17Update README.mdGravatar Jarred Sumner 1-1/+0
2022-10-17Update README.mdGravatar Jarred Sumner 1-6/+69
2022-10-17Clean up some codeGravatar Jarred Sumner 2-34/+35
2022-10-17Fix headers + add testGravatar Jarred Sumner 2-5/+24
2022-10-17More testsGravatar Jarred Sumner 1-3/+293
2022-10-17Implement `error` and `binaryType`Gravatar Jarred Sumner 4-30/+163
2022-10-17Handle .zero betterGravatar Jarred Sumner 1-0/+4
2022-10-17RedoGravatar Jarred Sumner 1-46/+45
2022-10-17Redo WebSocket apiGravatar Jarred Sumner 9-383/+510
2022-10-16Reflecting new home for bun templates (#1317)Gravatar Dennis Dudek 73-1633/+3
2022-10-16ymlGravatar Jarred Sumner 3-6/+6
2022-10-16Fix #1335Gravatar Jarred Sumner 1-9/+5
2022-10-16Revert "disable lto for UWS to workaround bug under load"Gravatar Jarred Sumner 1-1/+1
2022-10-16Disable InlineBlob optimizationGravatar Jarred Sumner 2-210/+247
2022-10-16disable lto for UWS to workaround bug under loadGravatar Jarred Sumner 1-1/+1
2022-10-16Add a commentGravatar Jarred Sumner 1-0/+1
2022-10-16Make debug logs configurableGravatar Jarred Sumner 1-3/+28
2022-10-16Name the threadGravatar Jarred Sumner 1-0/+1
2022-10-16Changed apiGravatar Jarred Sumner 1-4/+64
2022-10-16snapshotsGravatar Jarred Sumner 43-142/+142
2022-10-16Update uwsGravatar Jarred Sumner 1-0/+0
2022-10-16Set `Date` headerGravatar Jarred Sumner 1-0/+0
2022-10-16Make more sure we know what the types we are sending areGravatar Jarred Sumner 1-5/+5
2022-10-16Fix WebSocket server sending invalid data at the endGravatar Jarred Sumner 1-8/+10
2022-10-16Fail earlier when there are encoding errorsGravatar Jarred Sumner 1-25/+37
2022-10-15Disable some loggingGravatar Jarred Sumner 2-2/+2
2022-10-15More careful code generatorGravatar Jarred Sumner 1-5/+10
2022-10-15Simplify code that turns a fetch() response into a JSResponseGravatar Jarred Sumner 1-18/+24
2022-10-15Simplify the code that reads HTTP client request bodiesGravatar Jarred Sumner 2-136/+22