pub mod json;
pub mod proto;
use crate::domain::MarketDataEnvelope;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SerializationFormat {
Protobuf,
Json,
}
#[derive(Debug, thiserror::Error)]
pub enum SerializeError {
#[error("protobuf encode: {0}")]
Protobuf(#[from] proto::EncodeError),
#[error("json encode: {0}")]
Json(#[from] json::EncodeError),
}
pub fn serialize_envelope(
envelope: &MarketDataEnvelope,
format: SerializationFormat,
) -> Result<Vec<u8>, SerializeError> {
match format {
SerializationFormat::Protobuf => Ok(proto::encode_envelope(envelope)?),
SerializationFormat::Json => Ok(json::encode_envelope(envelope)?),
}
}
#[must_use]
#[inline]
pub fn content_type(format: SerializationFormat) -> &'static str {
match format {
SerializationFormat::Protobuf => "application/protobuf",
SerializationFormat::Json => "application/json",
}
}