openstack_cli/object_store/v1/container/create.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0
//! Creates a container.
//! You do not need to check whether a container already exists before issuing
//! a PUT operation because the operation is idempotent: It creates a container
//! or updates an existing container, as appropriate.
use bytes::Bytes;
use clap::Args;
use http::Response;
use serde::{Deserialize, Serialize};
use tracing::info;
use crate::output::OutputProcessor;
use crate::Cli;
use crate::OpenStackCliError;
use crate::OutputConfig;
use crate::StructTable;
use structable_derive::StructTable;
use openstack_sdk::{
api::RestClient,
types::{ApiVersion, ServiceType},
AsyncOpenStack,
};
use openstack_sdk::api::object_store::v1::container::create::Request;
use openstack_sdk::api::RawQueryAsync;
/// Creates a container.
/// You do not need to check whether a container already exists before issuing
/// a PUT operation because the operation is idempotent: It creates a container
/// or updates an existing container, as appropriate.
#[derive(Args, Clone, Debug)]
pub struct ContainerCommand {
/// The unique (within an account) name for the container. The container
/// name must be from 1 to 256 characters long and can start with any
/// character and contain any pattern. Character set must be UTF-8. The
/// container name cannot contain a slash (/) character because this
/// character delimits the container and object name. For example, the path
/// /v1/account/www/pages specifies the www container, not the www/pages
/// container.
#[arg()]
container: String,
}
/// Container
#[derive(Deserialize, Debug, Clone, Serialize, StructTable)]
pub struct Container {}
impl ContainerCommand {
pub async fn take_action(
&self,
parsed_args: &Cli,
client: &mut AsyncOpenStack,
) -> Result<(), OpenStackCliError> {
info!("Put Container with {:?}", self);
let op = OutputProcessor::from_args(parsed_args);
op.validate_args(parsed_args)?;
let mut ep_builder = Request::builder();
// Set path parameters
let ep = client.get_service_endpoint(
&ServiceType::ObjectStore,
Some(ApiVersion::new(1, 0)).as_ref(),
)?;
let account = ep
.url()
.path_segments()
.expect("Object Store endpoint must not point to a bare domain")
.filter(|x| !x.is_empty())
.next_back();
if let Some(account) = account {
ep_builder.account(account);
}
ep_builder.container(&self.container);
// Set query parameters
// Set body parameters
let ep = ep_builder
.build()
.map_err(|x| OpenStackCliError::EndpointBuild(x.to_string()))?;
let _rsp: Response<Bytes> = ep.raw_query_async(client).await?;
let data = Container {};
// Maybe output some headers metadata
op.output_human::<Container>(&data)?;
Ok(())
}
}