serde-rs / serde

Serialization framework for Rust
https://serde.rs/
Apache License 2.0
9.06k stars 767 forks source link

FR: Add new field attribute "skip_serializing_when" #2762

Open hxzhao527 opened 3 months ago

hxzhao527 commented 3 months ago

similar as #818. but this allows different values for the same type. for example

#[derive(Debug, serde::Deserialize, serde::Serialize)]
struct TCP {
    #[serde(skip_serializing_when = true)]
    no_delay: bool,
    #[serde(skip_serializing_when = true)]
    keep_alive: bool,
    #[serde(skip_serializing_when = false)]
    prefer_ipv4: bool,
}
#[derive(Debug, serde::Deserialize, serde::Serialize)]
struct Mux {
    enabled: bool,
    #[serde(skip_serializing_when = 8)]
    concurrency: u32,
    #[serde(skip_serializing_if = 60)]
    idle_timeout: u64,
}

#[derive(Debug, serde::Deserialize, serde::Serialize)]
struct Router {
    enabled: bool,
    bypass: Vec<String>,
    proxy: Vec<String>,
    block: Vec<String>,
    #[serde(skip_serializing_when = "proxy".to_string())]
    default_policy: String,
    #[serde(skip_serializing_when = "as_is".to_string())]
    domain_strategy: String,
    geoip: String,
    geosite: String,
}