#![cfg_attr(coverage_nightly, coverage(off))]
use super::{AgentMessage, MessageHeader};
use bytes::{Buf, BufMut, Bytes, BytesMut};
use serde::{Deserialize, Serialize};
use std::time::{SystemTime, UNIX_EPOCH};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MessageMetadata {
pub content_type: String,
pub encoding: String,
pub compressed: bool,
pub ttl_ms: Option<u64>,
pub trace_id: Option<String>,
}
pub trait MessageExtensions {
fn with_metadata(self, metadata: MessageMetadata) -> MessageWithMetadata;
fn is_expired(&self) -> bool;
fn size_bytes(&self) -> usize;
}
pub struct MessageWithMetadata {
pub message: AgentMessage,
pub metadata: MessageMetadata,
}
pub struct BinaryProtocol;
#[derive(Debug, thiserror::Error)]
pub enum ProtocolError {
#[error("Encoding error: {0}")]
EncodingError(String),
#[error("Decoding error: {0}")]
DecodingError(String),
#[error("Invalid message: {0}")]
InvalidMessage(String),
#[error("Unsupported protocol version: {0}")]
UnsupportedVersion(u8),
#[error("Checksum mismatch: expected {expected}, got {actual}")]
ChecksumMismatch { expected: u32, actual: u32 },
}
pub struct MessageBatch {
messages: Vec<AgentMessage>,
total_size: usize,
max_size: usize,
}
#[derive(Debug, thiserror::Error)]
pub enum BatchError {
#[error("Batch is full")]
BatchFull,
#[error("Message too large for batch")]
MessageTooLarge,
}
include!("message_format_protocol.rs");
include!("message_format_batch.rs");
include!("message_format_tests.rs");
include!("message_format_tests_batch.rs");