openstack_cli_block_storage/v3/message/list.rs
1// Licensed under the Apache License, Version 2.0 (the "License");
2// you may not use this file except in compliance with the License.
3// You may obtain a copy of the License at
4//
5// http://www.apache.org/licenses/LICENSE-2.0
6//
7// Unless required by applicable law or agreed to in writing, software
8// distributed under the License is distributed on an "AS IS" BASIS,
9// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10// See the License for the specific language governing permissions and
11// limitations under the License.
12//
13// SPDX-License-Identifier: Apache-2.0
14//
15// WARNING: This file is automatically generated from OpenAPI schema using
16// `openstack-codegenerator`.
17
18//! List Messages command
19//!
20//! Wraps invoking of the `v3/messages` with `GET` method
21
22use 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::block_storage::v3::message::list;
32use openstack_sdk::api::{Pagination, paged};
33use openstack_types::block_storage::v3::message::response;
34
35/// Returns a list of messages, transformed through view builder.
36#[derive(Args)]
37pub struct MessagesCommand {
38 /// Request Query parameters
39 #[command(flatten)]
40 query: QueryParameters,
41
42 /// Path parameters
43 #[command(flatten)]
44 path: PathParameters,
45
46 /// Total limit of entities count to return. Use this when there are too many entries.
47 #[arg(long, default_value_t = 10000)]
48 max_items: usize,
49}
50
51/// Query parameters
52#[derive(Args)]
53struct QueryParameters {
54 /// Requests a page size of items. Returns a number of items up to a limit
55 /// value. Use the limit parameter to make an initial limited request and
56 /// use the ID of the last-seen item from the response as the marker
57 /// parameter value in a subsequent limited request.
58 #[arg(
59 help_heading = "Query parameters",
60 long("page-size"),
61 visible_alias("limit")
62 )]
63 limit: Option<i32>,
64
65 /// The ID of the last-seen item. Use the limit parameter to make an
66 /// initial limited request and use the ID of the last-seen item from the
67 /// response as the marker parameter value in a subsequent limited request.
68 #[arg(help_heading = "Query parameters", long)]
69 marker: Option<String>,
70
71 /// Used in conjunction with limit to return a slice of items. offset is
72 /// where to start in the list.
73 #[arg(help_heading = "Query parameters", long)]
74 offset: Option<i32>,
75
76 /// Comma-separated list of sort keys and optional sort directions in the
77 /// form of < key > [: < direction > ]. A valid direction is asc
78 /// (ascending) or desc (descending).
79 #[arg(help_heading = "Query parameters", long)]
80 sort: Option<String>,
81
82 /// Sorts by one or more sets of attribute and sort direction combinations.
83 /// If you omit the sort direction in a set, default is desc. Deprecated in
84 /// favour of the combined sort parameter.
85 #[arg(help_heading = "Query parameters", long, value_parser = ["asc","desc"])]
86 sort_dir: Option<String>,
87
88 /// Sorts by an attribute. A valid value is name, status, container_format,
89 /// disk_format, size, id, created_at, or updated_at. Default is
90 /// created_at. The API uses the natural sorting direction of the sort_key
91 /// attribute value. Deprecated in favour of the combined sort parameter.
92 #[arg(help_heading = "Query parameters", long)]
93 sort_key: Option<String>,
94}
95
96/// Path parameters
97#[derive(Args)]
98struct PathParameters {}
99
100impl MessagesCommand {
101 /// Perform command action
102 pub async fn take_action<C: CliArgs>(
103 &self,
104 parsed_args: &C,
105 client: &mut AsyncOpenStack,
106 ) -> Result<(), OpenStackCliError> {
107 info!("List Messages");
108
109 let op =
110 OutputProcessor::from_args(parsed_args, Some("block-storage.message"), Some("list"));
111 op.validate_args(parsed_args)?;
112
113 let mut ep_builder = list::Request::builder();
114
115 // Set query parameters
116 if let Some(val) = &self.query.limit {
117 ep_builder.limit(*val);
118 }
119 if let Some(val) = &self.query.marker {
120 ep_builder.marker(val);
121 }
122 if let Some(val) = &self.query.offset {
123 ep_builder.offset(*val);
124 }
125 if let Some(val) = &self.query.sort {
126 ep_builder.sort(val);
127 }
128 if let Some(val) = &self.query.sort_dir {
129 ep_builder.sort_dir(val);
130 }
131 if let Some(val) = &self.query.sort_key {
132 ep_builder.sort_key(val);
133 }
134
135 let ep = ep_builder
136 .build()
137 .map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
138
139 let data: Vec<serde_json::Value> = paged(ep, Pagination::Limit(self.max_items))
140 .query_async(client)
141 .await?;
142
143 op.output_list::<response::list::MessageResponse>(data.clone())?;
144 // Show command specific hints
145 op.show_command_hint()?;
146 Ok(())
147 }
148}