use serde::{Serialize, de::DeserializeOwned};
use crate::error::Result;
#[cfg(feature = "websocket")]
use crate::error::Error;
pub trait Codec: Send + Sync + Clone + 'static {
fn encode<T: Serialize>(&self, value: &T) -> Result<Vec<u8>>;
fn decode<T: DeserializeOwned>(&self, bytes: &[u8]) -> Result<T>;
}
#[cfg(feature = "websocket")]
#[derive(Clone, Debug)]
pub struct JsonCodec;
#[cfg(feature = "websocket")]
impl Codec for JsonCodec {
fn encode<T: Serialize>(&self, value: &T) -> Result<Vec<u8>> {
serde_json::to_vec(value).map_err(|e| Error::Storage(e.to_string()))
}
fn decode<T: DeserializeOwned>(&self, bytes: &[u8]) -> Result<T> {
serde_json::from_slice(bytes).map_err(|e| Error::Storage(e.to_string()))
}
}