use clap::{Parser, Subcommand};
use openstack_sdk::{AsyncOpenStack, types::ServiceType};
use crate::{Cli, OpenStackCliError};
pub mod allocation;
pub mod allocation_candidate;
pub mod reshaper;
pub mod resource_class;
pub mod resource_provider;
pub mod r#trait;
pub mod usage;
#[derive(Parser)]
pub struct PlacementCommand {
#[command(subcommand)]
command: PlacementCommands,
}
#[allow(missing_docs)]
#[derive(Subcommand)]
pub enum PlacementCommands {
Allocation(Box<allocation::AllocationCommand>),
AllocationCandidate(Box<allocation_candidate::AllocationCandidateCommand>),
Reshaper(Box<reshaper::ReshaperCommand>),
ResourceClass(Box<resource_class::ResourceClassCommand>),
ResourceProvider(Box<resource_provider::ResourceProviderCommand>),
Trait(Box<r#trait::TraitCommand>),
Usage(Box<usage::UsageCommand>),
}
impl PlacementCommand {
pub async fn take_action(
&self,
parsed_args: &Cli,
session: &mut AsyncOpenStack,
) -> Result<(), OpenStackCliError> {
session
.discover_service_endpoint(&ServiceType::Placement)
.await?;
match &self.command {
PlacementCommands::Allocation(cmd) => cmd.take_action(parsed_args, session).await,
PlacementCommands::AllocationCandidate(cmd) => {
cmd.take_action(parsed_args, session).await
}
PlacementCommands::Reshaper(cmd) => cmd.take_action(parsed_args, session).await,
PlacementCommands::ResourceClass(cmd) => cmd.take_action(parsed_args, session).await,
PlacementCommands::ResourceProvider(cmd) => cmd.take_action(parsed_args, session).await,
PlacementCommands::Trait(cmd) => cmd.take_action(parsed_args, session).await,
PlacementCommands::Usage(cmd) => cmd.take_action(parsed_args, session).await,
}
}
}