mysqladm-rs/src/main.rs

82 lines
2.3 KiB
Rust
Raw Normal View History

#[macro_use]
extern crate prettytable;
#[cfg(feature = "mysql-admutils-compatibility")]
use std::path::PathBuf;
#[cfg(feature = "mysql-admutils-compatibility")]
use crate::cli::mysql_admutils_compatibility::{mysql_dbadm, mysql_useradm};
2024-04-20 04:17:16 +02:00
use clap::Parser;
mod cli;
mod core;
2024-04-20 04:17:16 +02:00
2024-04-23 00:36:06 +02:00
#[cfg(feature = "tui")]
mod tui;
2024-04-20 04:17:16 +02:00
#[derive(Parser)]
struct Args {
#[command(subcommand)]
2024-04-20 04:17:16 +02:00
command: Command,
#[command(flatten)]
config_overrides: core::config::GlobalConfigArgs,
2024-04-23 00:36:06 +02:00
#[cfg(feature = "tui")]
#[arg(short, long, alias = "tui", global = true)]
interactive: bool,
2024-04-20 04:17:16 +02:00
}
/// Database administration tool for non-admin users to manage their own MySQL databases and users.
///
/// This tool allows you to manage users and databases in MySQL.
///
/// You are only allowed to manage databases and users that are prefixed with
/// either your username, or a group that you are a member of.
2024-04-20 04:17:16 +02:00
#[derive(Parser)]
#[command(version, about, disable_help_subcommand = true)]
2024-04-20 04:17:16 +02:00
enum Command {
#[command(flatten)]
Db(cli::database_command::DatabaseCommand),
#[command(flatten)]
User(cli::user_command::UserCommand),
2024-04-20 04:17:16 +02:00
}
2024-08-07 16:45:24 +02:00
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
env_logger::init();
#[cfg(feature = "mysql-admutils-compatibility")]
{
let argv0 = std::env::args().next().and_then(|s| {
PathBuf::from(s)
.file_name()
.map(|s| s.to_string_lossy().to_string())
});
match argv0.as_deref() {
Some("mysql-dbadm") => return mysql_dbadm::main().await,
Some("mysql-useradm") => return mysql_useradm::main().await,
_ => { /* fall through */ }
}
}
2024-04-20 04:17:16 +02:00
let args: Args = Args::parse();
let config = core::config::get_config(args.config_overrides)?;
let connection = core::config::mysql_connection_from_config(config).await?;
let result = match args.command {
Command::Db(command) => cli::database_command::handle_command(command, connection).await,
Command::User(user_args) => cli::user_command::handle_command(user_args, connection).await,
};
match result {
Ok(_) => println!("Changes committed to database"),
Err(_) => println!("Changes reverted due to error"),
2024-04-20 04:17:16 +02:00
}
result
}