xrpc/message/
metadata.rs

1use serde::{Deserialize, Serialize};
2use std::time::{SystemTime, UNIX_EPOCH};
3
4use super::types::CompressionType;
5
6/// Optional metadata for messages
7#[derive(Debug, Clone, Default, Serialize, Deserialize)]
8pub struct MessageMetadata {
9    /// Timestamp when message was created (microseconds since epoch)
10    pub timestamp: u64,
11    /// Timeout in milliseconds
12    pub timeout_ms: Option<u32>,
13    /// Compression algorithm used
14    pub compression: CompressionType,
15    /// Stream ID for streaming messages
16    pub stream_id: Option<u64>,
17    /// Sequence number for ordered delivery
18    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    /// Set stream ID
46    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}