cloud_terrastodon_entrypoint 0.36.0

Main entrypoint for the Cloud Terrastodon CLI
use super::application_registration::AzureEntraApplicationRegistrationArgs;
use super::group::AzureEntraGroupArgs;
use super::oauth2_permission_grant::AzureEntraOAuth2PermissionGrantArgs;
use super::principal::AzureEntraPrincipalArgs;
use super::role::AzureEntraRoleArgs;
use super::service_principal::AzureEntraServicePrincipalArgs;
use super::user::AzureEntraUserArgs;
use clap::Subcommand;
use eyre::Result;

/// Entra (Azure AD) top-level subcommands.
#[derive(Subcommand, Debug, Clone)]
pub enum AzureEntraCommand {
    /// User-related operations (list, browse).
    User(AzureEntraUserArgs),
    /// Principal operations (list).
    Principal(AzureEntraPrincipalArgs),
    /// Role definition and assignment operations.
    Role(AzureEntraRoleArgs),
    /// Service principal operations (list, browse).
    #[command(alias = "sp")]
    ServicePrincipal(AzureEntraServicePrincipalArgs),
    /// Application registration operations (list, show, browse).
    #[command(aliases = ["app", "app-reg", "ar"])]
    ApplicationRegistration(AzureEntraApplicationRegistrationArgs),
    /// Group-related operations (members, etc.).
    Group(AzureEntraGroupArgs),
    /// OAuth2 delegated permission grant operations.
    #[command(name = "oauth2-permission-grant", aliases = ["oauth2-permission-grants", "oauth2-grant"])]
    OAuth2PermissionGrant(AzureEntraOAuth2PermissionGrantArgs),
}

impl AzureEntraCommand {
    pub async fn invoke(self) -> Result<()> {
        match self {
            AzureEntraCommand::User(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::Principal(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::Role(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::ServicePrincipal(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::ApplicationRegistration(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::Group(args) => {
                args.invoke().await?;
            }
            AzureEntraCommand::OAuth2PermissionGrant(args) => {
                args.invoke().await?;
            }
        }

        Ok(())
    }
}