Skip to main content

usesend_api/types/
domain.rs

1use serde::{Deserialize, Serialize};
2
3use super::DomainId;
4
5// --- Enums ---
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
8#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
9pub enum DomainStatus {
10    NotStarted,
11    Pending,
12    Success,
13    Failed,
14    TemporaryFailure,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
18pub enum DnsRecordType {
19    MX,
20    TXT,
21}
22
23// --- Types ---
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26#[serde(rename_all = "camelCase")]
27pub struct DnsRecord {
28    pub r#type: DnsRecordType,
29    pub name: String,
30    pub value: String,
31    pub ttl: String,
32    pub status: DomainStatus,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub priority: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub recommended: Option<bool>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40#[serde(rename_all = "camelCase")]
41pub struct Domain {
42    pub id: DomainId,
43    pub name: String,
44    pub team_id: i64,
45    pub status: DomainStatus,
46    pub public_key: String,
47    pub created_at: String,
48    pub updated_at: String,
49    pub dns_records: Vec<DnsRecord>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub region: Option<String>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub click_tracking: Option<bool>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub open_tracking: Option<bool>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub dkim_status: Option<String>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub spf_details: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub dmarc_added: Option<bool>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub is_verifying: Option<bool>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub error_message: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub subdomain: Option<String>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub verification_error: Option<String>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub last_checked_time: Option<String>,
72}
73
74// --- Request ---
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct CreateDomainRequest {
78    pub name: String,
79    pub region: String,
80}
81
82// --- Response ---
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct VerifyDomainResponse {
86    pub message: String,
87}