1use clap::{Parser, Subcommand};
18
19use openstack_cli_core::{cli::CliArgs, error::OpenStackCliError};
20use openstack_sdk::{AsyncOpenStack, types::ServiceType};
21
22pub mod limit;
23pub mod quota;
24pub mod recordset;
25pub mod reverse;
26pub mod zone;
27
28#[derive(Parser)]
30pub struct DnsCommand {
31 #[command(subcommand)]
33 command: DnsCommands,
34}
35
36#[allow(missing_docs)]
38#[derive(Subcommand)]
39pub enum DnsCommands {
40 Limit(Box<limit::LimitCommand>),
41 Quota(Box<quota::QuotaCommand>),
42 Recordset(Box<recordset::RecordsetCommand>),
43 Reverse(Box<reverse::ReverseCommand>),
44 Zone(Box<zone::ZoneCommand>),
45}
46
47impl DnsCommand {
48 pub async fn take_action<C: CliArgs>(
50 &self,
51 parsed_args: &C,
52 session: &mut AsyncOpenStack,
53 ) -> Result<(), OpenStackCliError> {
54 session.discover_service_endpoint(&ServiceType::Dns).await?;
55
56 match &self.command {
57 DnsCommands::Limit(cmd) => cmd.take_action(parsed_args, session).await,
58 DnsCommands::Quota(cmd) => cmd.take_action(parsed_args, session).await,
59 DnsCommands::Recordset(cmd) => cmd.take_action(parsed_args, session).await,
60 DnsCommands::Reverse(cmd) => cmd.take_action(parsed_args, session).await,
61 DnsCommands::Zone(cmd) => cmd.take_action(parsed_args, session).await,
62 }
63 }
64}