diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 1f07ccdf24..9b8dbfc3bc 100755 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -1031,6 +1031,7 @@ dependencies = [ "protobuf", "serde", "serde_json", + "serde_repr", "strum", "strum_macros", "unicode-segmentation", diff --git a/shared-lib/Cargo.lock b/shared-lib/Cargo.lock index 8667d60930..18ade8da40 100644 --- a/shared-lib/Cargo.lock +++ b/shared-lib/Cargo.lock @@ -471,6 +471,7 @@ dependencies = [ "protobuf", "serde", "serde_json", + "serde_repr", "strum", "strum_macros", "unicode-segmentation", @@ -1580,6 +1581,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d0516900518c29efa217c298fa1f4e6c6ffc85ae29fd7f4ee48f176e1a9ed5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serial_test" version = "0.5.1" diff --git a/shared-lib/flowy-folder-data-model/Cargo.toml b/shared-lib/flowy-folder-data-model/Cargo.toml index 3e8764b1bc..90422eaa53 100644 --- a/shared-lib/flowy-folder-data-model/Cargo.toml +++ b/shared-lib/flowy-folder-data-model/Cargo.toml @@ -19,6 +19,7 @@ chrono = { version = "0.4" } flowy-error-code = { path = "../flowy-error-code"} serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" +serde_repr = "0.1" [build-dependencies] lib-infra = { path = "../lib-infra", features = ["protobuf_file_gen"] } diff --git a/shared-lib/flowy-folder-data-model/src/entities/view.rs b/shared-lib/flowy-folder-data-model/src/entities/view.rs index 3af0943dc0..a16a384be1 100644 --- a/shared-lib/flowy-folder-data-model/src/entities/view.rs +++ b/shared-lib/flowy-folder-data-model/src/entities/view.rs @@ -8,9 +8,8 @@ use crate::{ }, }; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; -use serde::de::Unexpected; -use serde::{de, de::Visitor, Deserializer}; use serde::{Deserialize, Serialize}; +use serde_repr::*; use std::convert::TryInto; #[derive(Eq, PartialEq, ProtoBuf, Default, Debug, Clone, Serialize, Deserialize)] @@ -81,7 +80,8 @@ impl std::convert::From for Trash { } } -#[derive(Eq, PartialEq, Debug, ProtoBuf_Enum, Clone, Serialize)] +#[derive(Eq, PartialEq, Debug, ProtoBuf_Enum, Clone, Serialize_repr, Deserialize_repr)] +#[repr(u8)] pub enum ViewDataType { RichText = 0, PlainText = 1, @@ -89,7 +89,7 @@ pub enum ViewDataType { impl std::default::Default for ViewDataType { fn default() -> Self { - ViewDataType::PlainText + ViewDataType::RichText } } @@ -287,39 +287,58 @@ impl TryInto for UpdateViewPayload { } } -impl<'de> Deserialize<'de> for ViewDataType { - fn deserialize(deserializer: D) -> Result>::Error> - where - D: Deserializer<'de>, - { - struct ViewTypeVisitor(); - - impl<'de> Visitor<'de> for ViewTypeVisitor { - type Value = ViewDataType; - fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { - formatter.write_str("Plugin, RichText") - } - - fn visit_str(self, s: &str) -> Result - where - E: de::Error, - { - let view_type; - match s { - "Doc" | "RichText" => { - // Rename ViewType::Doc to ViewType::RichText, So we need to migrate the ViewType manually. - view_type = ViewDataType::RichText; - } - "Plugin" => { - view_type = ViewDataType::PlainText; - } - unknown => { - return Err(de::Error::invalid_value(Unexpected::Str(unknown), &self)); - } - } - Ok(view_type) - } - } - deserializer.deserialize_any(ViewTypeVisitor()) - } -} +// impl<'de> Deserialize<'de> for ViewDataType { +// fn deserialize(deserializer: D) -> Result>::Error> +// where +// D: Deserializer<'de>, +// { +// struct ViewTypeVisitor(); +// +// impl<'de> Visitor<'de> for ViewTypeVisitor { +// type Value = ViewDataType; +// fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { +// formatter.write_str("RichText, PlainText") +// } +// +// fn visit_u8(self, v: u8) -> Result +// where +// E: de::Error, +// { +// let data_type; +// match v { +// 0 => { +// data_type = ViewDataType::RichText; +// } +// 1 => { +// data_type = ViewDataType::PlainText; +// } +// _ => { +// return Err(de::Error::invalid_value(Unexpected::Unsigned(v as u64), &self)); +// } +// } +// Ok(data_type) +// } +// +// fn visit_str(self, s: &str) -> Result +// where +// E: de::Error, +// { +// let data_type; +// match s { +// "Doc" | "RichText" => { +// // Rename ViewDataType::Doc to ViewDataType::RichText, So we need to migrate the ViewType manually. +// data_type = ViewDataType::RichText; +// } +// "PlainText" => { +// data_type = ViewDataType::PlainText; +// } +// unknown => { +// return Err(de::Error::invalid_value(Unexpected::Str(unknown), &self)); +// } +// } +// Ok(data_type) +// } +// } +// deserializer.deserialize_any(ViewTypeVisitor()) +// } +// } diff --git a/shared-lib/flowy-user-data-model/src/protobuf/model/mod.rs b/shared-lib/flowy-user-data-model/src/protobuf/model/mod.rs index b9d261ebd8..e691c7e166 100644 --- a/shared-lib/flowy-user-data-model/src/protobuf/model/mod.rs +++ b/shared-lib/flowy-user-data-model/src/protobuf/model/mod.rs @@ -4,11 +4,11 @@ mod errors; pub use errors::*; -mod user_setting; -pub use user_setting::*; - mod user_profile; pub use user_profile::*; mod auth; pub use auth::*; + +mod user_setting; +pub use user_setting::*;