use alloc::{boxed::Box, format};
use core::fmt::Debug;
use serde::{Deserialize, Serialize};
use crate::protocol::{DeserializationError, LocalError};
pub trait WireFormat: 'static + Debug {
fn serialize<T: Serialize>(value: T) -> Result<Box<[u8]>, LocalError>;
type Deserializer<'de>: serde::Deserializer<'de>;
fn deserializer(bytes: &[u8]) -> Self::Deserializer<'_>;
fn deserialize<'de, T: Deserialize<'de>>(bytes: &'de [u8]) -> Result<T, DeserializationError> {
let deserializer = Self::deserializer(bytes);
T::deserialize(deserializer).map_err(|err| DeserializationError::new(format!("Deserialization error: {err:?}")))
}
}