#[cfg(feature = "bincode")]
pub mod bincode;
pub mod json;
#[cfg(feature = "extra-serialization")]
pub mod extra;
#[cfg(feature = "serialization-cache")]
pub mod cache;
pub mod utils;
use crate::error::Result;
use serde::{de::DeserializeOwned, Serialize};
use std::borrow::Cow;
pub use json::JsonSerializer;
#[cfg(feature = "bincode")]
pub use bincode::BincodeSerializer;
#[cfg(feature = "extra-serialization")]
pub use extra::{CborSerializer, MessagePackSerializer, SerializerRegistry};
#[cfg(feature = "serialization-cache")]
pub use cache::{SerializationCache, SerializationCacheConfig, SerializationCacheStats};
pub trait Serializer: Send + Sync {
fn serialize<T: Serialize>(&self, value: &T) -> Result<Vec<u8>>;
fn deserialize<T: DeserializeOwned>(&self, data: &[u8]) -> Result<T>;
}
pub trait ZeroCopySerializer: Send + Sync {
fn serialize_zero_copy<'a, T: Serialize>(&self, value: &'a T) -> Result<Cow<'a, [u8]>>;
fn deserialize_zero_copy<'a, T: DeserializeOwned + Clone>(
&self,
data: &'a [u8],
) -> Result<Cow<'a, T>>;
}
#[derive(Clone, Debug)]
pub enum SerializerEnum {
Json(JsonSerializer),
#[cfg(feature = "bincode")]
Bincode(bincode::BincodeSerializer),
}
impl Serializer for SerializerEnum {
fn serialize<T: Serialize>(&self, value: &T) -> Result<Vec<u8>> {
match self {
SerializerEnum::Json(s) => s.serialize(value),
#[cfg(feature = "bincode")]
SerializerEnum::Bincode(s) => s.serialize(value),
}
}
fn deserialize<T: DeserializeOwned>(&self, data: &[u8]) -> Result<T> {
match self {
SerializerEnum::Json(s) => s.deserialize(data),
#[cfg(feature = "bincode")]
SerializerEnum::Bincode(s) => s.deserialize(data),
}
}
}