aboutsummaryrefslogtreecommitdiff
path: root/src/models/properties.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/properties.rs')
-rw-r--r--src/models/properties.rs84
1 files changed, 84 insertions, 0 deletions
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 },
+}