From e8e641786cb53b2060b263b3f754f413eac36c82 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Tue, 1 Mar 2022 12:45:02 +0100 Subject: [PATCH] better ser/de rules --- src/backend/node.rs | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/backend/node.rs b/src/backend/node.rs index edc9523..9089864 100644 --- a/src/backend/node.rs +++ b/src/backend/node.rs @@ -15,8 +15,13 @@ pub struct Node { name: String, #[serde(flatten)] node_type: NodeType, - #[serde(deserialize_with = "deserialize_default_from_null")] + #[serde( + default, + deserialize_with = "deserialize_default_from_null", + skip_serializing_if = "Vec::is_empty" + )] content: Vec, + #[serde(default, skip_serializing_if = "Option::is_none")] subtree: Option, #[serde(flatten)] meta: Metadata, @@ -33,29 +38,36 @@ pub enum NodeType { #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize, Constructor, Getters)] pub struct Metadata { - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] size: u64, + #[serde(default, skip_serializing_if = "Option::is_none")] mtime: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] atime: Option>, + #[serde(default, skip_serializing_if = "Option::is_none")] ctime: Option>, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] mode: u32, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] uid: u32, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] gid: u32, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] user: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] group: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] inode: u64, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] device_id: u64, - #[serde(default)] + #[serde(default, skip_serializing_if = "is_default")] links: u64, } +fn is_default(t: &T) -> bool { + t == &T::default() +} + impl Node { pub fn new_file(name: OsString, meta: Metadata) -> Self { Self {