Struct serde_with::As

source ·
pub struct As<T: ?Sized>(/* private fields */);
Expand description

Adapter to convert from serde_as to the serde traits.

The As type adapter allows using types which implement DeserializeAs or SerializeAs in place of serde’s with annotation. The with annotation allows running custom code when de/serializing, however it is quite inflexible. The traits DeserializeAs/SerializeAs are more flexible, as they allow composition and nesting of types to create more complex de/serialization behavior. However, they are not directly compatible with serde, as they are not provided by serde. The As type adapter makes them compatible, by forwarding the function calls to serialize/deserialize to the corresponding functions serialize_as and deserialize_as.

It is not required to use this type directly. Instead, it is highly encouraged to use the #[serde_as] attribute since it includes further usability improvements. If the use of the use of the proc-macro is not acceptable, then As can be used directly with serde.

#[derive(Deserialize, Serialize)]
// Serialize numbers as sequence of strings, using Display and FromStr
#[serde(with = "As::<Vec<DisplayFromStr>>")]
field: Vec<u8>,

If the normal Deserialize/Serialize traits should be used, the placeholder type Same can be used. It implements DeserializeAs/SerializeAs, when the underlying type implements Deserialize/Serialize.

#[derive(Deserialize, Serialize)]
// Serialize map, turn keys into strings but keep type of value
#[serde(with = "As::<BTreeMap<DisplayFromStr, Same>>")]
field: BTreeMap<u8, i32>,

Implementations§

source§

impl<T: ?Sized> As<T>

source

pub fn deserialize<'de, D, I>(deserializer: D) -> Result<I, D::Error>
where T: DeserializeAs<'de, I>, D: Deserializer<'de>,

Deserialize type T using DeserializeAs

The function signature is compatible with serde’s with annotation.

source§

impl<T: ?Sized> As<T>

source

pub fn serialize<S, I>(value: &I, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer, T: SerializeAs<I>, I: ?Sized,

Serialize type T using SerializeAs

The function signature is compatible with serde’s with annotation.

Auto Trait Implementations§

§

impl<T> Freeze for As<T>
where T: ?Sized,

§

impl<T> RefUnwindSafe for As<T>
where T: RefUnwindSafe + ?Sized,

§

impl<T> Send for As<T>
where T: Send + ?Sized,

§

impl<T> Sync for As<T>
where T: Sync + ?Sized,

§

impl<T> Unpin for As<T>
where T: Unpin + ?Sized,

§

impl<T> UnwindSafe for As<T>
where T: UnwindSafe + ?Sized,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

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

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.