cloud_dns/api/
dns_keys.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 DnsKey {
10    pub kind: String, // "dns#dnsKey"
11    pub id: String,
12    pub algorithm: Algorithm,
13    pub key_length: u64,
14    pub public_key: String,
15    pub creation_time: String,
16    pub is_active: bool,
17    pub r#type: KeyType,
18    pub key_tag: i32,
19    pub digests: Vec<Digest>,
20    pub description: Option<String>,
21}
22
23#[derive(Serialize, Deserialize, Debug)]
24#[serde(rename_all = "camelCase")]
25pub enum KeyType {
26    KeySigning,
27    ZoneSigning,
28}
29
30#[derive(Serialize, Deserialize, Debug)]
31#[serde(rename_all = "lowercase")]
32pub enum Algorithm {
33    Ecdsap256sha256,
34    Ecdsap384sha384,
35    Rsasha1,
36    Rsasha256,
37    Rsasha512,
38}
39
40#[derive(Serialize, Deserialize, Debug)]
41#[serde(rename_all = "camelCase")]
42pub struct Digest {
43    pub r#type: DigestType,
44    pub digest: String,
45}
46
47#[derive(Serialize, Deserialize, Debug)]
48#[serde(rename_all = "lowercase")]
49pub enum DigestType {
50    Sha1,
51    Sha256,
52    Sha384,
53}
54
55#[derive(Serialize, Deserialize, Debug)]
56#[serde(rename_all = "camelCase")]
57pub struct DnsKeys {
58    #[serde(flatten)]
59    pub envelope: ListEnvelope,
60    pub dns_keys: Vec<DnsKey>,
61}
62
63pub struct DnsKeysHandler<'client> {
64    client: &'client DnsClient,
65}
66
67impl<'client> DnsKeysHandler<'client> {
68    pub(crate) fn new(client: &'client DnsClient) -> Self {
69        Self { client }
70    }
71
72    pub async fn list(&self, managed_zone: &str) -> Result<DnsKeys> {
73        let route = format!(
74            "managedZones/{managed_zone}/dnsKeys",
75            managed_zone = managed_zone,
76        );
77
78        self.client.get(route).await
79    }
80
81    pub async fn get(&self, managed_zone: &str, dns_key_id: &str) -> Result<DnsKey> {
82        let route = format!(
83            "managedZones/{managed_zone}/dnsKeys/{dns_key_id}",
84            managed_zone = managed_zone,
85            dns_key_id = dns_key_id,
86        );
87
88        self.client.get(route).await
89    }
90}