cloud_dns/api/
changes.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{DnsClient, Result};
4
5use super::{resource_record_sets::ResourceRecordSet, ListEnvelope};
6
7#[derive(Serialize, Deserialize, Debug)]
8#[serde(rename_all = "camelCase")]
9pub struct Change {
10    pub kind: String, // "dns#change"
11    pub additions: Vec<ResourceRecordSet>,
12    pub deletions: Vec<ResourceRecordSet>,
13    pub start_time: String,
14    pub id: String,
15    pub status: Status,
16    pub is_serving: Option<bool>,
17}
18
19#[derive(Serialize, Deserialize, Debug)]
20#[serde(rename_all = "lowercase")]
21pub enum Status {
22    Done,
23    Pending,
24}
25
26#[derive(Serialize, Deserialize, Debug)]
27#[serde(rename_all = "camelCase")]
28pub struct Changes {
29    #[serde(flatten)]
30    pub envelope: ListEnvelope,
31    pub changes: Vec<Change>,
32}
33
34pub struct ChangesHandler<'client> {
35    client: &'client DnsClient,
36}
37
38impl<'client> ChangesHandler<'client> {
39    pub(crate) fn new(client: &'client DnsClient) -> Self {
40        Self { client }
41    }
42
43    pub async fn list(&self, managed_zone: &str) -> Result<Changes> {
44        let route = format!("managedZones/{}/changes", managed_zone);
45
46        self.client.get(route).await
47    }
48
49    pub async fn get(&self, managed_zone: &str, change_id: &str) -> Result<Change> {
50        let route = format!("managedZones/{}/changes/{}", managed_zone, change_id);
51
52        self.client.get(route).await
53    }
54
55    pub async fn create(&self, managed_zone: &str, change: Change) -> Result<Change> {
56        let route = format!("managedZones/{}/changes", managed_zone);
57
58        self.client.post(route, Some(&change)).await
59    }
60}