1use serde::{Deserialize, Serialize};
16#[cfg(feature = "server")]
17use utoipa::ToSchema;
18
19#[derive(Debug, Serialize, Deserialize)]
21#[cfg_attr(feature = "server", derive(ToSchema))]
22#[serde(rename_all = "camelCase")]
23pub struct AddRecordRequest {
24 pub name: String,
26
27 #[serde(rename = "type")]
29 pub record_type: String,
30
31 pub value: String,
33
34 #[serde(default = "default_ttl")]
36 pub ttl: u32,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub priority: Option<u16>,
41}
42
43#[derive(Debug, Serialize, Deserialize)]
45#[cfg_attr(feature = "server", derive(ToSchema))]
46#[serde(rename_all = "camelCase")]
47pub struct RemoveRecordRequest {
48 pub name: String,
50
51 #[serde(rename = "type")]
53 pub record_type: String,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub value: Option<String>,
58}
59
60#[derive(Debug, Serialize, Deserialize)]
62#[cfg_attr(feature = "server", derive(ToSchema))]
63#[serde(rename_all = "camelCase")]
64pub struct UpdateRecordRequest {
65 pub name: String,
67
68 #[serde(rename = "type")]
70 pub record_type: String,
71
72 pub current_value: String,
74
75 pub new_value: String,
77
78 #[serde(default = "default_ttl")]
80 pub ttl: u32,
81
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub priority: Option<u16>,
85}
86
87#[derive(Debug, Serialize, Deserialize)]
89#[cfg_attr(feature = "server", derive(ToSchema))]
90pub struct RecordResponse {
91 pub success: bool,
92 pub message: String,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub details: Option<serde_json::Value>,
95}
96
97fn default_ttl() -> u32 {
98 3600
99}