Skip to main content

photon_protocol/ports/
codec.rs

1use bytes::BytesMut;
2
3pub trait Codec<T>: Send + Sync + Clone + 'static {
4    fn encode(&self, batch: &T, output: &mut BytesMut) -> Result<(), CodecError>;
5    fn decode(&self, input: &[u8]) -> Result<T, CodecError>;
6}
7
8#[derive(Debug, thiserror::Error)]
9pub enum CodecError {
10    #[error("failed to encode batch: {reason}")]
11    EncodeFailed { reason: String },
12
13    #[error("failed to decode batch: {reason}")]
14    DecodeFailed { reason: String },
15
16    #[error(transparent)]
17    Unknown(#[from] anyhow::Error),
18}