From 4dab45d21dd64a5a277773aa5d8b7a892b391ede Mon Sep 17 00:00:00 2001 From: Michael Thomas Date: Wed, 31 Jan 2024 16:18:53 -0500 Subject: [PATCH 1/2] fix(search): add #[derive(Deserialize)] to models --- src/models/search.rs | 46 ++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/models/search.rs b/src/models/search.rs index c9e7e91..b6478a9 100644 --- a/src/models/search.rs +++ b/src/models/search.rs @@ -3,48 +3,48 @@ use crate::models::paging::{Pageable, Paging, PagingCursor}; use crate::models::Number; use chrono::{DateTime, Utc}; use serde::ser::SerializeMap; -use serde::{Serialize, Serializer}; +use serde::{Deserialize, Serialize, Serializer}; -#[derive(Serialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] #[serde(rename_all = "snake_case")] pub enum SortDirection { Ascending, Descending, } -#[derive(Serialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] #[serde(rename_all = "snake_case")] pub enum SortTimestamp { LastEditedTime, } -#[derive(Serialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] #[serde(rename_all = "snake_case")] pub enum FilterValue { Page, Database, } -#[derive(Serialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] #[serde(rename_all = "snake_case")] pub enum FilterProperty { Object, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] pub struct Sort { /// The name of the timestamp to sort against. timestamp: SortTimestamp, direction: SortDirection, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] pub struct Filter { property: FilterProperty, value: FilterValue, } -#[derive(Serialize, Debug, Eq, PartialEq, Default)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Default)] pub struct SearchRequest { #[serde(skip_serializing_if = "Option::is_none")] query: Option, @@ -56,7 +56,7 @@ pub struct SearchRequest { paging: Option, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum TextCondition { Equals(String), @@ -86,7 +86,7 @@ where serializer.serialize_map(Some(0))?.end() } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum NumberCondition { Equals(Number), @@ -101,14 +101,14 @@ pub enum NumberCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum CheckboxCondition { Equals(bool), DoesNotEqual(bool), } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum SelectCondition { /// Only return pages where the page property value matches the provided value exactly. @@ -123,7 +123,7 @@ pub enum SelectCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum MultiSelectCondition { /// Only return pages where the page property value contains the provided value. @@ -138,7 +138,7 @@ pub enum MultiSelectCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum DateCondition { /// Only return pages where the page property value matches the provided date exactly. @@ -187,7 +187,7 @@ pub enum DateCondition { NextYear, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum PeopleCondition { Contains(UserId), @@ -201,7 +201,7 @@ pub enum PeopleCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum FilesCondition { /// Only return pages where the page property value is empty. @@ -212,7 +212,7 @@ pub enum FilesCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum RelationCondition { /// Only return pages where the page property value contains the provided value. @@ -227,7 +227,7 @@ pub enum RelationCondition { IsNotEmpty, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum FormulaCondition { /// Only return pages where the result type of the page property formula is "text" @@ -244,7 +244,7 @@ pub enum FormulaCondition { Date(DateCondition), } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(rename_all = "snake_case")] pub enum PropertyCondition { RichText(TextCondition), @@ -259,7 +259,7 @@ pub enum PropertyCondition { Formula(FormulaCondition), } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] #[serde(untagged)] pub enum FilterCondition { Property { @@ -273,14 +273,14 @@ pub enum FilterCondition { Or { or: Vec }, } -#[derive(Serialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Hash, Copy, Clone)] #[serde(rename_all = "snake_case")] pub enum DatabaseSortTimestamp { CreatedTime, LastEditedTime, } -#[derive(Serialize, Debug, Eq, PartialEq, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Clone)] pub struct DatabaseSort { // Todo: Should property and timestamp be mutually exclusive? (i.e a flattened enum?) // the documentation is not clear: @@ -293,7 +293,7 @@ pub struct DatabaseSort { pub direction: SortDirection, } -#[derive(Serialize, Debug, Eq, PartialEq, Default, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Default, Clone)] pub struct DatabaseQuery { #[serde(skip_serializing_if = "Option::is_none")] pub sorts: Option>, From a28866604ef9fa8d8b798c556c5304ca06712a22 Mon Sep 17 00:00:00 2001 From: Michael Thomas Date: Wed, 31 Jan 2024 16:21:12 -0500 Subject: [PATCH 2/2] fix(paging): add #[derive(Deserialize)] --- src/models/paging.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/models/paging.rs b/src/models/paging.rs index c38ae11..8ea5858 100644 --- a/src/models/paging.rs +++ b/src/models/paging.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; #[serde(transparent)] pub struct PagingCursor(String); -#[derive(Serialize, Debug, Eq, PartialEq, Default, Clone)] +#[derive(Serialize, Deserialize, Debug, Eq, PartialEq, Default, Clone)] pub struct Paging { #[serde(skip_serializing_if = "Option::is_none")] pub start_cursor: Option,