ahri_tre_protocol/
warning.rs1use 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}