Struct serde_with::DisplayFromStr[][src]

pub struct DisplayFromStr;

De/Serialize using Display and FromStr implementation

This allows to deserialize a string as a number. It can be very useful for serialization formats like JSON, which do not support integer numbers and have to resort to strings to represent them.

Another use case is types with Display and FromStr implementations, but without serde support, which can be found in some crates.

If you control the type you want to de/serialize, you can instead use the two derive macros, SerializeDisplay and DeserializeFromStr. They properly implement the traits Serialize and Deserialize such that user of the type no longer have to use the serde_as system.

The same functionality is also available as serde_with::rust::display_fromstr compatible with serde’s with-annotation.

Examples

#[serde_as]
#[derive(Deserialize, Serialize)]
struct A {
    #[serde_as(as = "DisplayFromStr")]
    mime: mime::Mime,
    #[serde_as(as = "DisplayFromStr")]
    number: u32,
}

let v: A = serde_json::from_value(json!({
    "mime": "text/plain",
    "number": "159",
})).unwrap();
assert_eq!(mime::TEXT_PLAIN, v.mime);
assert_eq!(159, v.number);

let x = A {
    mime: mime::STAR_STAR,
    number: 777,
};
assert_eq!(json!({ "mime": "*/*", "number": "777" }), serde_json::to_value(&x).unwrap());

Trait Implementations

impl Clone for DisplayFromStr[src]

impl Copy for DisplayFromStr[src]

impl Debug for DisplayFromStr[src]

impl Default for DisplayFromStr[src]

impl<'de, T> DeserializeAs<'de, T> for DisplayFromStr where
    T: FromStr,
    T::Err: Display
[src]

impl<T> SerializeAs<T> for DisplayFromStr where
    T: Display
[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.