pub struct BoolFromInt<S: Strictness = Strict>(/* private fields */);
Expand description
Deserialize a boolean from a number
Deserialize a number (of u8
) and turn it into a boolean.
The adapter supports a Strict
and Flexible
format.
In Strict
mode, the number must be 0
or 1
.
All other values produce an error.
In Flexible
mode, the number any non-zero value is converted to true
.
During serialization only 0
or 1
are ever emitted.
§Examples
#[serde_as]
#[derive(Deserialize, Serialize)]
struct Data(#[serde_as(as = "BoolFromInt")] bool);
let data = Data(true);
let j = json!(1);
// Ensure serialization and deserialization produce the expected results
assert_eq!(j, serde_json::to_value(&data).unwrap());
assert_eq!(data, serde_json::from_value(j).unwrap());
// false maps to 0
let data = Data(false);
let j = json!(0);
assert_eq!(j, serde_json::to_value(&data).unwrap());
assert_eq!(data, serde_json::from_value(j).unwrap());
#[serde_as]
#[derive(Deserialize, Serialize)]
struct Flexible(#[serde_as(as = "BoolFromInt<serde_with::formats::Flexible>")] bool);
// Flexible turns any non-zero number into true
let data = Flexible(true);
let j = json!(100);
assert_eq!(data, serde_json::from_value(j).unwrap());
Trait Implementations§
Source§impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Strict>
impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Strict>
Source§fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Flexible>
impl<'de> DeserializeAs<'de, bool> for BoolFromInt<Flexible>
Source§fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<bool, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<STRICTNESS: Strictness> SerializeAs<bool> for BoolFromInt<STRICTNESS>
impl<STRICTNESS: Strictness> SerializeAs<bool> for BoolFromInt<STRICTNESS>
Source§fn serialize_as<S>(source: &bool, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(source: &bool, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Auto Trait Implementations§
impl<S> Freeze for BoolFromInt<S>
impl<S> RefUnwindSafe for BoolFromInt<S>where
S: RefUnwindSafe,
impl<S> Send for BoolFromInt<S>where
S: Send,
impl<S> Sync for BoolFromInt<S>where
S: Sync,
impl<S> Unpin for BoolFromInt<S>where
S: Unpin,
impl<S> UnwindSafe for BoolFromInt<S>where
S: 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
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 0 bytes