tencent_sdk/services/dns/
types.rs

1use serde::Serialize;
2
3/// Supported DNSPod record types (defaults to TXT when used in builders).
4#[derive(Clone, Copy, Debug, PartialEq)]
5pub enum RecordType<'a> {
6    Txt,
7    A,
8    Cname,
9    Custom(&'a str),
10}
11
12impl<'a> RecordType<'a> {
13    pub fn as_str(&self) -> &str {
14        match self {
15            RecordType::Txt => "TXT",
16            RecordType::A => "A",
17            RecordType::Cname => "CNAME",
18            RecordType::Custom(value) => value,
19        }
20    }
21}
22
23impl<'a> From<&'a str> for RecordType<'a> {
24    fn from(value: &'a str) -> Self {
25        match value.to_uppercase().as_str() {
26            "TXT" => RecordType::Txt,
27            "A" => RecordType::A,
28            "CNAME" => RecordType::Cname,
29            _ => RecordType::Custom(value),
30        }
31    }
32}
33
34impl<'a> Serialize for RecordType<'a> {
35    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
36    where
37        S: serde::Serializer,
38    {
39        serializer.serialize_str(self.as_str())
40    }
41}
42
43/// DNSPod record line values.
44#[derive(Clone, Copy, Debug, PartialEq)]
45pub enum RecordLine<'a> {
46    Default,
47    Custom(&'a str),
48}
49
50impl<'a> RecordLine<'a> {
51    pub fn as_str(&self) -> &str {
52        match self {
53            RecordLine::Default => "默认",
54            RecordLine::Custom(value) => value,
55        }
56    }
57}
58
59impl<'a> From<&'a str> for RecordLine<'a> {
60    fn from(value: &'a str) -> Self {
61        match value {
62            "默认" => RecordLine::Default,
63            other if other.eq_ignore_ascii_case("default") => RecordLine::Default,
64            other => RecordLine::Custom(other),
65        }
66    }
67}
68
69impl<'a> Serialize for RecordLine<'a> {
70    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
71    where
72        S: serde::Serializer,
73    {
74        serializer.serialize_str(self.as_str())
75    }
76}