cloud_dns/api/
resource_record_sets.rs1use 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, 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}