Skip to main content

ahri_tre_protocol/
warning.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[serde(rename_all = "snake_case")]
5pub enum ProtocolWarningCode {
6    Deprecated,
7    PartialMetadata,
8    MetadataInferred,
9    MetadataTruncated,
10    ResultTruncated,
11    OperationDelayed,
12    RetryScheduled,
13    CleanupPending,
14    UnsupportedDetailOmitted,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct ProtocolWarning {
19    pub code: ProtocolWarningCode,
20    pub message: String,
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub target: Option<String>,
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub details: Option<ProtocolWarningDetails>,
25}
26
27impl ProtocolWarning {
28    pub fn new(code: ProtocolWarningCode, message: impl Into<String>) -> Self {
29        Self {
30            code,
31            message: message.into(),
32            target: None,
33            details: None,
34        }
35    }
36
37    pub fn with_target(mut self, target: impl Into<String>) -> Self {
38        self.target = Some(target.into());
39        self
40    }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44#[serde(tag = "kind", rename_all = "snake_case")]
45pub enum ProtocolWarningDetails {
46    Truncated { limit: u64 },
47    Omitted { field: String },
48}