use serde::{Deserialize, Deserializer};
#[derive(Debug, PartialEq, Eq)]
pub struct True;
impl<'de> Deserialize<'de> for True {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let bool = bool::deserialize(deserializer)?;
if bool {
Ok(True)
} else {
Err(serde::de::Error::invalid_value(
serde::de::Unexpected::Bool(false),
&"the `true` boolean",
))
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[derive(Debug, Deserialize, PartialEq)]
struct Foo {
foo: True,
}
#[test]
fn de_true() {
assert_eq!(
Foo { foo: True },
serde_json::from_str::<Foo>(r#"{"foo": true}"#).unwrap(),
);
serde_json::from_str::<Foo>(r#"{"foo": false}"#).unwrap_err();
}
}