From 3d7cf66648a681cc0ecbafcbe38c377f34f7e09b Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 3 Dec 2025 15:56:54 +0900 Subject: [PATCH] client: add dynamic completions for mysql-admutils commands --- .../mysql_admutils_compatibility/mysql_dbadm.rs | 13 ++++++------- .../mysql_admutils_compatibility/mysql_useradm.rs | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/client/mysql_admutils_compatibility/mysql_dbadm.rs b/src/client/mysql_admutils_compatibility/mysql_dbadm.rs index 214e463..73b34f4 100644 --- a/src/client/mysql_admutils_compatibility/mysql_dbadm.rs +++ b/src/client/mysql_admutils_compatibility/mysql_dbadm.rs @@ -1,4 +1,5 @@ use clap::Parser; +use clap_complete::ArgValueCompleter; use futures_util::{SinkExt, StreamExt}; use std::os::unix::net::UnixStream as StdUnixStream; use std::path::PathBuf; @@ -16,13 +17,10 @@ use crate::{ }, }, core::{ - bootstrap::bootstrap_server_connection_and_drop_privileges, - database_privileges::DatabasePrivilegeRow, - protocol::{ + bootstrap::bootstrap_server_connection_and_drop_privileges, completion::mysql_database_completer, database_privileges::DatabasePrivilegeRow, protocol::{ ClientToServerMessageStream, GetDatabasesPrivilegeDataError, Request, Response, create_client_to_server_message_stream, - }, - types::MySQLDatabase, + }, types::MySQLDatabase }, }; @@ -128,20 +126,21 @@ pub struct CreateArgs { #[derive(Parser)] pub struct DatabaseDropArgs { /// The name of the DATABASE(s) to drop. - #[arg(num_args = 1..)] + #[arg(num_args = 1.., add = ArgValueCompleter::new(mysql_database_completer))] name: Vec, } #[derive(Parser)] pub struct DatabaseShowArgs { /// The name of the DATABASE(s) to show. - #[arg(num_args = 0..)] + #[arg(num_args = 0.., add = ArgValueCompleter::new(mysql_database_completer))] name: Vec, } #[derive(Parser)] pub struct EditPermArgs { /// The name of the DATABASE to edit permissions for. + #[arg(add = ArgValueCompleter::new(mysql_database_completer))] pub database: MySQLDatabase, } diff --git a/src/client/mysql_admutils_compatibility/mysql_useradm.rs b/src/client/mysql_admutils_compatibility/mysql_useradm.rs index 425ac84..f332603 100644 --- a/src/client/mysql_admutils_compatibility/mysql_useradm.rs +++ b/src/client/mysql_admutils_compatibility/mysql_useradm.rs @@ -1,4 +1,5 @@ use clap::Parser; +use clap_complete::ArgValueCompleter; use futures_util::{SinkExt, StreamExt}; use std::path::PathBuf; @@ -16,11 +17,9 @@ use crate::{ }, }, core::{ - bootstrap::bootstrap_server_connection_and_drop_privileges, - protocol::{ + bootstrap::bootstrap_server_connection_and_drop_privileges, completion::mysql_user_completer, protocol::{ ClientToServerMessageStream, Request, Response, create_client_to_server_message_stream, - }, - types::MySQLUser, + }, types::MySQLUser }, server::sql::user_operations::DatabaseUser, }; @@ -91,21 +90,21 @@ pub struct CreateArgs { #[derive(Parser)] pub struct DeleteArgs { /// The name of the USER(s) to delete. - #[arg(num_args = 1..)] + #[arg(num_args = 1.., add = ArgValueCompleter::new(mysql_user_completer))] name: Vec, } #[derive(Parser)] pub struct PasswdArgs { /// The name of the USER(s) to change the password for. - #[arg(num_args = 1..)] + #[arg(num_args = 1.., add = ArgValueCompleter::new(mysql_user_completer))] name: Vec, } #[derive(Parser)] pub struct ShowArgs { /// The name of the USER(s) to show. - #[arg(num_args = 0..)] + #[arg(num_args = 0.., add = ArgValueCompleter::new(mysql_user_completer))] name: Vec, }