RefConvert

Type Alias RefConvert 

Source
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 */);