pub enum Enable<T> {
On(T),
Off,
}Expand description
Enable<T> is a wrapper that adds one extra field enabled when the T
is serialized with Serde. That field can be true, in which case all
of the fields for T need to be present, or it can be false at which point
all fields of T can be ommited.
The use case is for configuration YAMLs where sections can be toggled on or off.
use serde::{Deserialize, Serialize};
use serde_enabled::Enable;
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Outside {
inside: Enable<Inside>,
}
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
struct Inside {
thing: u32,
other: String,
}
let raw = indoc::indoc! {r#"
inside:
enable: false
thing: 1
other: "Great"
"#};
let o: Outside = serde_yaml::from_str(raw).unwrap();
assert!(!o.inside.is_enabled());
let raw = indoc::indoc! {r#"
inside:
enable: true
thing: 1
other: "Great"
"#};
let o: Outside = serde_yaml::from_str(raw).unwrap();
assert!(o.inside.is_enabled());
assert_eq!(
o,
Outside {
inside: Enable::On(Inside {
thing: 1,
other: "Great".into()
})
}
);Variants§
Implementations§
Trait Implementations§
Source§impl<'de, T: Deserialize<'de>> Deserialize<'de> for Enable<T>
impl<'de, T: Deserialize<'de>> Deserialize<'de> for Enable<T>
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl<T: Eq> Eq for Enable<T>
impl<T> StructuralPartialEq for Enable<T>
Auto Trait Implementations§
impl<T> Freeze for Enable<T>where
T: Freeze,
impl<T> RefUnwindSafe for Enable<T>where
T: RefUnwindSafe,
impl<T> Send for Enable<T>where
T: Send,
impl<T> Sync for Enable<T>where
T: Sync,
impl<T> Unpin for Enable<T>where
T: Unpin,
impl<T> UnwindSafe for Enable<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more