[−][src]Struct serde_with::As
Adapter to convert from serde_as
to the serde traits.
The As
type adapter allows to use types implementing DeserializeAs
or SerializeAs
in place of serde's with-annotation.
The with-annotation allows to run 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
impl<T> As<T>
[src]
pub fn serialize<S, I>(value: &I, serializer: S) -> Result<S::Ok, S::Error> where
S: Serializer,
T: SerializeAs<I>,
[src]
S: Serializer,
T: SerializeAs<I>,
Serialize type T
using SerializeAs
The function signature is compatible with serde's with-annotation.
pub fn deserialize<'de, D, I>(deserializer: D) -> Result<I, D::Error> where
T: DeserializeAs<'de, I>,
D: Deserializer<'de>,
[src]
T: DeserializeAs<'de, I>,
D: Deserializer<'de>,
Deserialize type T
using DeserializeAs
The function signature is compatible with serde's with-annotation.
Trait Implementations
impl<T: Clone> Clone for As<T>
[src]
impl<T: Copy> Copy for As<T>
[src]
impl<T: Debug> Debug for As<T>
[src]
impl<T: Default> Default for As<T>
[src]
Auto Trait Implementations
impl<T> RefUnwindSafe for As<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for As<T> where
T: Send,
T: Send,
impl<T> Sync for As<T> where
T: Sync,
T: Sync,
impl<T> Unpin for As<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for As<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>,