pub struct NoneAsZero;Expand description
De/Serialize an Option<NonZero*> losslessly as the inner integer
Serde natively supports NonZeroU8 and friends, but rejects 0 during deserialization.
This adapter treats 0 as None and any other value as Some, allowing the wire format
to always be a plain integer.
Supported in-memory types are Option<NonZeroU8>, Option<NonZeroU16>, Option<NonZeroU32>,
Option<NonZeroU64>, Option<NonZeroU128>, Option<NonZeroUsize>, Option<NonZeroI8>,
Option<NonZeroI16>, Option<NonZeroI32>, Option<NonZeroI64>, Option<NonZeroI128>,
and Option<NonZeroIsize>.
§Examples
#[serde_as]
#[derive(Deserialize, Serialize)]
struct Data {
#[serde_as(as = "NoneAsZero")]
value: Option<NonZeroU32>,
}
let data = Data { value: NonZeroU32::new(7) };
assert_eq!(json!({"value": 7}), serde_json::to_value(&data).unwrap());
assert_eq!(data, serde_json::from_value(json!({"value": 7})).unwrap());
let none = Data { value: None };
assert_eq!(json!({"value": 0}), serde_json::to_value(&none).unwrap());
assert_eq!(none, serde_json::from_value(json!({"value": 0})).unwrap());Trait Implementations§
Source§impl<'de> DeserializeAs<'de, Option<NonZero<i8>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<i8>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI8>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI8>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<i16>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<i16>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI16>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI16>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<i32>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<i32>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI32>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI32>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<i64>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<i64>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI64>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI64>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<i128>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<i128>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI128>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroI128>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<isize>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<isize>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroIsize>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroIsize>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<u8>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<u8>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU8>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU8>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<u16>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<u16>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU16>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU16>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<u32>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<u32>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU32>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU32>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<u64>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<u64>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU64>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU64>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<u128>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<u128>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU128>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroU128>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<'de> DeserializeAs<'de, Option<NonZero<usize>>> for NoneAsZero
impl<'de> DeserializeAs<'de, Option<NonZero<usize>>> for NoneAsZero
Source§fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroUsize>, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<Option<NonZeroUsize>, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl SerializeAs<Option<NonZero<i8>>> for NoneAsZero
impl SerializeAs<Option<NonZero<i8>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroI8>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroI8>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<i16>>> for NoneAsZero
impl SerializeAs<Option<NonZero<i16>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroI16>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroI16>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<i32>>> for NoneAsZero
impl SerializeAs<Option<NonZero<i32>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroI32>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroI32>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<i64>>> for NoneAsZero
impl SerializeAs<Option<NonZero<i64>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroI64>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroI64>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<i128>>> for NoneAsZero
impl SerializeAs<Option<NonZero<i128>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroI128>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroI128>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<isize>>> for NoneAsZero
impl SerializeAs<Option<NonZero<isize>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroIsize>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroIsize>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<u8>>> for NoneAsZero
impl SerializeAs<Option<NonZero<u8>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroU8>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroU8>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<u16>>> for NoneAsZero
impl SerializeAs<Option<NonZero<u16>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroU16>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroU16>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<u32>>> for NoneAsZero
impl SerializeAs<Option<NonZero<u32>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroU32>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroU32>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<u64>>> for NoneAsZero
impl SerializeAs<Option<NonZero<u64>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroU64>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroU64>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<u128>>> for NoneAsZero
impl SerializeAs<Option<NonZero<u128>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroU128>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroU128>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Source§impl SerializeAs<Option<NonZero<usize>>> for NoneAsZero
impl SerializeAs<Option<NonZero<usize>>> for NoneAsZero
Source§fn serialize_as<S>(
source: &Option<NonZeroUsize>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(
source: &Option<NonZeroUsize>,
serializer: S,
) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Auto Trait Implementations§
impl Freeze for NoneAsZero
impl RefUnwindSafe for NoneAsZero
impl Send for NoneAsZero
impl Sync for NoneAsZero
impl Unpin for NoneAsZero
impl UnsafeUnpin for NoneAsZero
impl UnwindSafe for NoneAsZero
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