Browse Source

chore: serde ViewDataType as u8

appflowy 3 năm trước cách đây
mục cha
commit
6eddb7c8c5

+ 1 - 0
frontend/rust-lib/Cargo.lock

@@ -1031,6 +1031,7 @@ dependencies = [
  "protobuf",
  "serde",
  "serde_json",
+ "serde_repr",
  "strum",
  "strum_macros",
  "unicode-segmentation",

+ 12 - 0
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"

+ 1 - 0
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"] }

+ 59 - 40
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<View> 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<UpdateViewParams> for UpdateViewPayload {
     }
 }
 
-impl<'de> Deserialize<'de> for ViewDataType {
-    fn deserialize<D>(deserializer: D) -> Result<Self, <D as Deserializer<'de>>::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<E>(self, s: &str) -> Result<Self::Value, E>
-            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<D>(deserializer: D) -> Result<Self, <D as Deserializer<'de>>::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<E>(self, v: u8) -> Result<Self::Value, E>
+//             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<E>(self, s: &str) -> Result<Self::Value, E>
+//             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())
+//     }
+// }

+ 3 - 3
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::*;