pub mod attachment_settings;
pub mod domains;
mod features;
mod input;
mod login_providers;
pub mod organizations;
mod problems;
pub mod settings;
pub mod teams;
use crate::{
client::WekanClientFactory,
command_result::CommandSuccess,
credentials::{CredentialStore, SecretInputProvider},
error::AppError,
input::ConfirmationProvider,
};
use clap::{Args, Subcommand};
#[derive(Debug, Args)]
pub struct AdminArgs {
#[command(subcommand)]
pub command: AdminCommand,
}
#[derive(Debug, Subcommand)]
pub enum AdminCommand {
OauthProvider(login_providers::OauthProviderArgs),
Passwordless(login_providers::PasswordlessArgs),
Problem(problems::ProblemArgs),
Domain(domains::DomainArgs),
Org(organizations::OrganizationArgs),
Team(teams::TeamArgs),
Settings(settings::SettingsArgs),
AttachmentSettings(attachment_settings::AttachmentSettingsArgs),
}
pub(crate) async fn dispatch(
command: AdminCommand,
factory: &WekanClientFactory,
store: &dyn CredentialStore,
secrets: &dyn SecretInputProvider,
confirmation: &dyn ConfirmationProvider,
) -> Result<CommandSuccess, AppError> {
match command {
AdminCommand::OauthProvider(args) => {
login_providers::oauth(args.command, factory, store, secrets).await
}
AdminCommand::Passwordless(args) => {
login_providers::passwordless(args.command, factory, store).await
}
AdminCommand::Problem(args) => problems::execute(args.command, factory, store).await,
AdminCommand::Domain(args) => domains::execute(args.command, factory, store).await,
AdminCommand::Org(args) => {
organizations::execute(args.command, factory, store, confirmation).await
}
AdminCommand::Team(args) => {
teams::execute(args.command, factory, store, confirmation).await
}
AdminCommand::Settings(args) => settings::execute(args.command, factory, store).await,
AdminCommand::AttachmentSettings(args) => {
attachment_settings::execute(args.command, factory, store, secrets).await
}
}
}