openstack_cli_network/v2/agent/dhcp_network/
set.rs1use clap::Args;
23use tracing::info;
24
25use openstack_cli_core::cli::CliArgs;
26use openstack_cli_core::error::OpenStackCliError;
27use openstack_cli_core::output::OutputProcessor;
28use openstack_sdk::AsyncOpenStack;
29
30use openstack_cli_core::common::parse_key_val;
31use openstack_sdk::api::QueryAsync;
32use openstack_sdk::api::network::v2::agent::dhcp_network::set;
33use openstack_types::network::v2::agent::dhcp_network::response;
34use serde_json::Value;
35
36#[derive(Args)]
38pub struct DhcpNetworkCommand {
39 #[command(flatten)]
41 query: QueryParameters,
42
43 #[command(flatten)]
45 path: PathParameters,
46
47 #[arg(long="property", value_name="key=value", value_parser=parse_key_val::<String, Value>)]
48 #[arg(help_heading = "Body parameters")]
49 properties: Option<Vec<(String, Value)>>,
50}
51
52#[derive(Args)]
54struct QueryParameters {}
55
56#[derive(Args)]
58struct PathParameters {
59 #[arg(
61 help_heading = "Path parameters",
62 id = "path_param_agent_id",
63 value_name = "AGENT_ID"
64 )]
65 agent_id: String,
66
67 #[arg(
69 help_heading = "Path parameters",
70 id = "path_param_id",
71 value_name = "ID"
72 )]
73 id: String,
74}
75
76impl DhcpNetworkCommand {
77 pub async fn take_action<C: CliArgs>(
79 &self,
80 parsed_args: &C,
81 client: &mut AsyncOpenStack,
82 ) -> Result<(), OpenStackCliError> {
83 info!("Set DhcpNetwork");
84
85 let op = OutputProcessor::from_args(
86 parsed_args,
87 Some("network.agent/dhcp_network"),
88 Some("set"),
89 );
90 op.validate_args(parsed_args)?;
91
92 let mut ep_builder = set::Request::builder();
93
94 ep_builder.agent_id(&self.path.agent_id);
95 ep_builder.id(&self.path.id);
96
97 if let Some(properties) = &self.properties {
99 ep_builder.properties(properties.iter().cloned());
100 }
101
102 let ep = ep_builder
103 .build()
104 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
105
106 let data: serde_json::Value = ep.query_async(client).await?;
107
108 op.output_single::<response::set::DhcpNetworkResponse>(data.clone())?;
109 op.show_command_hint()?;
111 Ok(())
112 }
113}