[−][src]Struct serde_with::DefaultOnNull
Deserialize Default
from null
values
Instead of erroring on null
values, it simply deserializes the Default
variant of the type.
During serialization this wrapper does nothing.
The serialization behavior of the underlying type is preserved.
The type must implement Default
for this conversion to work.
The same functionality is also available as serde_with::rust::default_on_null
compatible with serde's with-annotation.
Examples
#[serde_as] #[derive(Deserialize, Debug)] struct A { #[serde_as(deserialize_as = "DefaultOnNull")] value: u32, } let a: A = serde_json::from_str(r#"{"value": 123}"#).unwrap(); assert_eq!(123, a.value); // null values are deserialized into the default, here 0 let a: A = serde_json::from_str(r#"{"value": null}"#).unwrap(); assert_eq!(0, a.value);
DefaultOnNull
can be combined with other conversion methods.
In this example we deserialize a Vec
, each element is deserialized from a string.
If we encounter null, then we get the default value of 0.
#[serde_as] #[derive(Serialize, Deserialize)] struct C { #[serde_as(as = "Vec<DefaultOnNull<DisplayFromStr>>")] value: Vec<u32>, }; let c: C = serde_json::from_value(json!({ "value": ["1", "2", null, null, "5"] })).unwrap(); assert_eq!(vec![1, 2, 0, 0, 5], c.value);
Trait Implementations
impl<T: Clone> Clone for DefaultOnNull<T>
[src]
pub fn clone(&self) -> DefaultOnNull<T>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<T: Copy> Copy for DefaultOnNull<T>
[src]
impl<T: Debug> Debug for DefaultOnNull<T>
[src]
impl<T: Default> Default for DefaultOnNull<T>
[src]
pub fn default() -> DefaultOnNull<T>
[src]
impl<'de, T, U> DeserializeAs<'de, T> for DefaultOnNull<U> where
U: DeserializeAs<'de, T>,
T: Default,
[src]
U: DeserializeAs<'de, T>,
T: Default,
pub fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error> where
D: Deserializer<'de>,
[src]
D: Deserializer<'de>,
impl<T, U> SerializeAs<T> for DefaultOnNull<U> where
U: SerializeAs<T>,
[src]
U: SerializeAs<T>,
pub fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer,
[src]
S: Serializer,
Auto Trait Implementations
impl<T> RefUnwindSafe for DefaultOnNull<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for DefaultOnNull<T> where
T: Send,
T: Send,
impl<T> Sync for DefaultOnNull<T> where
T: Sync,
T: Sync,
impl<T> Unpin for DefaultOnNull<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for DefaultOnNull<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,