mirror of
https://github.com/rustic-rs/rustic.git
synced 2025-10-26 11:18:51 +00:00
better ser/de rules
This commit is contained in:
parent
8f7cdb653d
commit
e8e641786c
@ -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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user