cloud_dns/api/
dns_keys.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 DnsKey {
10 pub kind: String, 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}