pub type RefConvert<T, F = Id> = Codec<AddRef<Into<T, F>>, From<T, F>>;Expand description
Adapter to serialize using From on a borrow of the source value
The adapter works by converting a borrow of the source value to T and serializing the result
using F. When deserializing, a T is deserialized using F and converted to the source
type.
§Example
use serde::{Deserialize, Serialize};
use serde_json::json;
#[derive(Deserialize, Serialize)]
struct ReversedBytes(Vec<u8>);
impl From<&Vec<u8>> for ReversedBytes {
fn from(bytes: &Vec<u8>) -> ReversedBytes {
let mut bytes = bytes.clone();
bytes.reverse();
ReversedBytes(bytes)
}
}
impl From<ReversedBytes> for Vec<u8> {
fn from(bytes: ReversedBytes) -> Vec<u8> {
let mut bytes = bytes.0;
bytes.reverse();
bytes
}
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
struct Foo(#[serde(with = "serdapt::RefConvert::<ReversedBytes>")] Vec<u8>);
let foo = Foo(vec![1, 2, 3]);
let serialized = serde_json::to_value(&foo).unwrap();
assert_eq!(serialized, json!([3, 2, 1]));
let deserialized = serde_json::from_value::<Foo>(serialized).unwrap();
assert_eq!(deserialized, foo);Aliased Type§
pub struct RefConvert<T, F = Id>(/* private fields */);