1use serde::{Deserialize, Serialize};
2use std::time::{SystemTime, UNIX_EPOCH};
3
4use super::types::CompressionType;
5
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct MessageMetadata {
9 pub timestamp: u64,
11 pub timeout_ms: Option<u32>,
13 pub compression: CompressionType,
15 pub stream_id: Option<u64>,
17 pub sequence_number: Option<u64>,
19}
20
21impl MessageMetadata {
22 pub fn new() -> Self {
23 Self {
24 timestamp: SystemTime::now()
25 .duration_since(UNIX_EPOCH)
26 .unwrap()
27 .as_micros() as u64,
28 timeout_ms: None,
29 compression: CompressionType::None,
30 stream_id: None,
31 sequence_number: None,
32 }
33 }
34
35 pub fn with_timeout(mut self, timeout_ms: u32) -> Self {
36 self.timeout_ms = Some(timeout_ms);
37 self
38 }
39
40 pub fn with_compression(mut self, compression: CompressionType) -> Self {
41 self.compression = compression;
42 self
43 }
44
45 pub fn with_stream(mut self, stream_id: u64, sequence: u64) -> Self {
47 self.stream_id = Some(stream_id);
48 self.sequence_number = Some(sequence);
49 self
50 }
51}