better ser/de rules

This commit is contained in:
Alexander Weiss 2022-03-01 12:45:02 +01:00
parent 8f7cdb653d
commit e8e641786c

View File

@ -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<Id>,
#[serde(default, skip_serializing_if = "Option::is_none")]
subtree: Option<Id>,
#[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<DateTime<Local>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
atime: Option<DateTime<Local>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
ctime: Option<DateTime<Local>>,
#[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: Default + PartialEq>(t: &T) -> bool {
t == &T::default()
}
impl Node {
pub fn new_file(name: OsString, meta: Metadata) -> Self {
Self {