openstack_cli_network/v2/segment/
list.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_sdk::api::QueryAsync;
31use openstack_sdk::api::network::v2::segment::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::network::v2::segment::response;
34
35#[derive(Args)]
54#[command(about = "List segments")]
55pub struct SegmentsCommand {
56 #[command(flatten)]
58 query: QueryParameters,
59
60 #[command(flatten)]
62 path: PathParameters,
63
64 #[arg(long, default_value_t = 10000)]
66 max_items: usize,
67}
68
69#[derive(Args)]
71struct QueryParameters {
72 #[arg(help_heading = "Query parameters", long)]
74 description: Option<String>,
75
76 #[arg(help_heading = "Query parameters", long)]
78 id: Option<String>,
79
80 #[arg(
85 help_heading = "Query parameters",
86 long("page-size"),
87 visible_alias("limit")
88 )]
89 limit: Option<u32>,
90
91 #[arg(help_heading = "Query parameters", long)]
95 marker: Option<String>,
96
97 #[arg(help_heading = "Query parameters", long)]
99 name: Option<String>,
100
101 #[arg(help_heading = "Query parameters", long)]
103 network_id: Option<String>,
104
105 #[arg(help_heading = "Query parameters", long)]
107 network_type: Option<String>,
108
109 #[arg(action=clap::ArgAction::Set, help_heading = "Query parameters", long)]
111 page_reverse: Option<bool>,
112
113 #[arg(help_heading = "Query parameters", long)]
115 physical_network: Option<String>,
116
117 #[arg(help_heading = "Query parameters", long)]
119 revision_number: Option<String>,
120
121 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
124 sort_dir: Option<Vec<String>>,
125
126 #[arg(action=clap::ArgAction::Append, help_heading = "Query parameters", long)]
129 sort_key: Option<Vec<String>>,
130}
131
132#[derive(Args)]
134struct PathParameters {}
135
136impl SegmentsCommand {
137 pub async fn take_action<C: CliArgs>(
139 &self,
140 parsed_args: &C,
141 client: &mut AsyncOpenStack,
142 ) -> Result<(), OpenStackCliError> {
143 info!("List Segments");
144
145 let op = OutputProcessor::from_args(parsed_args, Some("network.segment"), Some("list"));
146 op.validate_args(parsed_args)?;
147
148 let mut ep_builder = list::Request::builder();
149
150 if let Some(val) = &self.query.limit {
152 ep_builder.limit(*val);
153 }
154 if let Some(val) = &self.query.marker {
155 ep_builder.marker(val);
156 }
157 if let Some(val) = &self.query.page_reverse {
158 ep_builder.page_reverse(*val);
159 }
160 if let Some(val) = &self.query.description {
161 ep_builder.description(val);
162 }
163 if let Some(val) = &self.query.id {
164 ep_builder.id(val);
165 }
166 if let Some(val) = &self.query.name {
167 ep_builder.name(val);
168 }
169 if let Some(val) = &self.query.network_id {
170 ep_builder.network_id(val);
171 }
172 if let Some(val) = &self.query.network_type {
173 ep_builder.network_type(val);
174 }
175 if let Some(val) = &self.query.physical_network {
176 ep_builder.physical_network(val);
177 }
178 if let Some(val) = &self.query.revision_number {
179 ep_builder.revision_number(val);
180 }
181 if let Some(val) = &self.query.sort_dir {
182 ep_builder.sort_dir(val.iter());
183 }
184 if let Some(val) = &self.query.sort_key {
185 ep_builder.sort_key(val.iter());
186 }
187
188 let ep = ep_builder
189 .build()
190 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
191
192 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
193 .query_async(client)
194 .await?;
195
196 op.output_list::<response::list::SegmentResponse>(data.clone())?;
197 op.show_command_hint()?;
199 Ok(())
200 }
201}