pub struct FromIntoRef<T>(/* private fields */);
Expand description
Serialize a reference value by converting to/from a proxy type with serde support.
This adapter serializes a type O
by converting it into a second type T
and serializing T
.
Deserializing works analogue, by deserializing a T
and then converting into O
.
struct S {
#[serde_as(as = "FromIntoRef<T>")]
value: O,
}
For serialization O
needs to be for<'a> &'a O: Into<T>
.
For deserialization the opposite T: Into<O>
is required.
Note: TryFromIntoRef
is the more generalized version of this adapter which uses the TryInto
trait instead.
§Example
#[derive(Debug, PartialEq)]
struct Rgb {
red: u8,
green: u8,
blue: u8,
}
impl From<(u8, u8, u8)> for Rgb { ... }
impl From<Rgb> for (u8, u8, u8) { ... }
#[serde_as]
#[derive(Deserialize, Serialize)]
struct Color {
#[serde_as(as = "FromIntoRef<(u8, u8, u8)>")]
rgb: Rgb,
}
let color = Color {
rgb: Rgb {
red: 128,
green: 64,
blue: 32,
},
};
// Define our expected JSON form
let j = json!({
"rgb": [128, 64, 32],
});
// Ensure serialization and deserialization produce the expected results
assert_eq!(j, serde_json::to_value(&color).unwrap());
assert_eq!(color, serde_json::from_value(j).unwrap());
Trait Implementations§
Source§impl<'de, T, U> DeserializeAs<'de, T> for FromIntoRef<U>where
U: Into<T> + Deserialize<'de>,
impl<'de, T, U> DeserializeAs<'de, T> for FromIntoRef<U>where
U: Into<T> + Deserialize<'de>,
Source§fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>where
D: Deserializer<'de>,
fn deserialize_as<D>(deserializer: D) -> Result<T, D::Error>where
D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer.
Source§impl<T, U> SerializeAs<T> for FromIntoRef<U>
impl<T, U> SerializeAs<T> for FromIntoRef<U>
Source§fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
fn serialize_as<S>(source: &T, serializer: S) -> Result<S::Ok, S::Error>where
S: Serializer,
Serialize this value into the given Serde serializer.
Auto Trait Implementations§
impl<T> Freeze for FromIntoRef<T>
impl<T> RefUnwindSafe for FromIntoRef<T>where
T: RefUnwindSafe,
impl<T> Send for FromIntoRef<T>where
T: Send,
impl<T> Sync for FromIntoRef<T>where
T: Sync,
impl<T> Unpin for FromIntoRef<T>where
T: Unpin,
impl<T> UnwindSafe for FromIntoRef<T>where
T: UnwindSafe,
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
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 0 bytes