cloud_dns/api/
resource_record_sets.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{DnsClient, Result};
4
5use super::ListEnvelope;
6
7#[derive(Serialize, Deserialize, Debug)]
8#[serde(rename_all = "camelCase")]
9pub struct ResourceRecordSet {
10    pub kind: String, // "dns#resourceRecordSet"
11    pub name: String,
12    pub r#type: String,
13    pub ttl: i32,
14    pub rrdatas: Vec<String>,
15    pub signature_rrdatas: Vec<String>,
16}
17#[derive(Serialize, Deserialize, Debug)]
18#[serde(rename_all = "camelCase")]
19pub struct ResourceRecordSets {
20    #[serde(flatten)]
21    pub envelope: ListEnvelope,
22    pub rrsets: Vec<ResourceRecordSet>,
23}
24
25pub struct ResourceRecordSetsHandler<'client> {
26    client: &'client DnsClient,
27}
28
29impl<'client> ResourceRecordSetsHandler<'client> {
30    pub(crate) fn new(client: &'client DnsClient) -> Self {
31        Self { client }
32    }
33
34    pub async fn list(&self, managed_zone: &str) -> Result<ResourceRecordSets> {
35        let route = format!(
36            "managedZones/{managed_zone}/rrsets",
37            managed_zone = managed_zone,
38        );
39
40        self.client.get(route).await
41    }
42
43    pub async fn get(
44        &self,
45        managed_zone: &str,
46        name: &str,
47        r#type: &str,
48    ) -> Result<ResourceRecordSet> {
49        let route = format!(
50            "managedZones/{managed_zone}/rrsets/{name}/{typ}",
51            managed_zone = managed_zone,
52            name = name,
53            typ = r#type,
54        );
55
56        self.client.get(route).await
57    }
58
59    pub async fn patch(
60        &self,
61        managed_zone: &str,
62        name: &str,
63        r#type: &str,
64        record_set: ResourceRecordSet,
65    ) -> Result<ResourceRecordSet> {
66        let route = format!(
67            "managedZones/{managed_zone}/rrsets/{name}/{typ}",
68            managed_zone = managed_zone,
69            name = name,
70            typ = r#type,
71        );
72
73        self.client.patch(route, Some(&record_set)).await
74    }
75
76    pub async fn create(
77        &self,
78        managed_zone: &str,
79        record_set: ResourceRecordSet,
80    ) -> Result<ResourceRecordSet> {
81        let route = format!(
82            "managedZones/{managed_zone}/rrsets",
83            managed_zone = managed_zone,
84        );
85
86        self.client.post(route, Some(&record_set)).await
87    }
88
89    pub async fn delete(&self, managed_zone: &str, name: &str, r#type: &str) -> Result<()> {
90        let route = format!(
91            "managedZones/{managed_zone}/rrsets/{name}/{typ}",
92            managed_zone = managed_zone,
93            name = name,
94            typ = r#type,
95        );
96
97        self.client.delete(route).await
98    }
99}