1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
use serde::de::DeserializeOwned;
use serde::Serialize;
use std::marker::Sized;

pub struct Json;

impl super::Format for Json {
    fn to_bytes<T: Sized + Serialize>(value: T) -> super::Result<Vec<u8>> {
        match serde_json::to_vec(&value) {
            Ok(bytes) => Ok(bytes),
            Err(e) => Err(super::Error::from(e)),
        }
    }
    fn from_bytes<T: DeserializeOwned>(bytes: Vec<u8>) -> super::Result<T> {
        match serde_json::from_slice::<T>(&bytes) {
            Ok(value) => Ok(value),
            Err(e) => Err(super::Error::from(e)),
        }
    }
}