clippy pedantic fix + get rid of a few unwraps
This commit is contained in:
@@ -14,7 +14,7 @@ use tokio_stream::StreamExt;
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct CheckAuthArgs {
|
||||
/// The MySQL database(s) or user(s) to check authorization for
|
||||
/// The `MySQL` database(s) or user(s) to check authorization for
|
||||
#[arg(num_args = 1.., value_name = "NAME")]
|
||||
name: Vec<String>,
|
||||
|
||||
@@ -63,7 +63,7 @@ pub async fn check_authorization(
|
||||
print_check_authorization_output_status(&result);
|
||||
}
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct CreateDbArgs {
|
||||
/// The MySQL database(s) to create
|
||||
/// The `MySQL` database(s) to create
|
||||
#[arg(num_args = 1.., value_name = "DB_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(prefix_completer)))]
|
||||
name: Vec<MySQLDatabase>,
|
||||
@@ -36,7 +36,7 @@ pub async fn create_databases(
|
||||
anyhow::bail!("No database names provided");
|
||||
}
|
||||
|
||||
let message = Request::CreateDatabases(args.name.to_owned());
|
||||
let message = Request::CreateDatabases(args.name.clone());
|
||||
server_connection.send(message).await?;
|
||||
|
||||
let result = match server_connection.next().await {
|
||||
@@ -57,13 +57,13 @@ pub async fn create_databases(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct CreateUserArgs {
|
||||
/// The MySQL user(s) to create
|
||||
/// The `MySQL` user(s) to create
|
||||
#[arg(num_args = 1.., value_name = "USER_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(prefix_completer)))]
|
||||
username: Vec<MySQLUser>,
|
||||
@@ -46,7 +46,7 @@ pub async fn create_users(
|
||||
anyhow::bail!("No usernames provided");
|
||||
}
|
||||
|
||||
let message = Request::CreateUsers(args.username.to_owned());
|
||||
let message = Request::CreateUsers(args.username.clone());
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
anyhow::bail!(anyhow::Error::from(err).context("Failed to communicate with server"));
|
||||
@@ -70,20 +70,19 @@ pub async fn create_users(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
|
||||
let successfully_created_users = result
|
||||
.iter()
|
||||
.filter_map(|(username, result)| result.as_ref().ok().map(|_| username))
|
||||
.filter_map(|(username, result)| result.as_ref().ok().map(|()| username))
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
for username in successfully_created_users {
|
||||
if !args.no_password
|
||||
&& Confirm::new()
|
||||
.with_prompt(format!(
|
||||
"Do you want to set a password for user '{}'?",
|
||||
username
|
||||
"Do you want to set a password for user '{username}'?"
|
||||
))
|
||||
.default(false)
|
||||
.interact()?
|
||||
@@ -98,7 +97,7 @@ pub async fn create_users(
|
||||
|
||||
match server_connection.next().await {
|
||||
Some(Ok(Response::SetUserPassword(result))) => {
|
||||
print_set_password_output_status(&result, username)
|
||||
print_set_password_output_status(&result, username);
|
||||
}
|
||||
response => return erroneous_server_response(response),
|
||||
}
|
||||
@@ -110,7 +109,7 @@ pub async fn create_users(
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct DropDbArgs {
|
||||
/// The MySQL database(s) to drop
|
||||
/// The `MySQL` database(s) to drop
|
||||
#[arg(num_args = 1.., value_name = "DB_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_database_completer)))]
|
||||
name: Vec<MySQLDatabase>,
|
||||
@@ -47,7 +47,7 @@ pub async fn drop_databases(
|
||||
"Are you sure you want to drop the databases?\n\n{}\n\nThis action cannot be undone",
|
||||
args.name
|
||||
.iter()
|
||||
.map(|d| format!("- {}", d))
|
||||
.map(|d| format!("- {d}"))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n")
|
||||
))
|
||||
@@ -62,7 +62,7 @@ pub async fn drop_databases(
|
||||
}
|
||||
}
|
||||
|
||||
let message = Request::DropDatabases(args.name.to_owned());
|
||||
let message = Request::DropDatabases(args.name.clone());
|
||||
server_connection.send(message).await?;
|
||||
|
||||
let result = match server_connection.next().await {
|
||||
@@ -83,13 +83,13 @@ pub async fn drop_databases(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct DropUserArgs {
|
||||
/// The MySQL user(s) to drop
|
||||
/// The `MySQL` user(s) to drop
|
||||
#[arg(num_args = 1.., value_name = "USER_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
username: Vec<MySQLUser>,
|
||||
@@ -47,7 +47,7 @@ pub async fn drop_users(
|
||||
"Are you sure you want to drop the users?\n\n{}\n\nThis action cannot be undone",
|
||||
args.username
|
||||
.iter()
|
||||
.map(|d| format!("- {}", d))
|
||||
.map(|d| format!("- {d}"))
|
||||
.collect::<Vec<_>>()
|
||||
.join("\n")
|
||||
))
|
||||
@@ -61,7 +61,7 @@ pub async fn drop_users(
|
||||
}
|
||||
}
|
||||
|
||||
let message = Request::DropUsers(args.username.to_owned());
|
||||
let message = Request::DropUsers(args.username.clone());
|
||||
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
@@ -86,13 +86,13 @@ pub async fn drop_users(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ pub struct EditPrivsArgs {
|
||||
|
||||
#[derive(Args, Debug, Clone)]
|
||||
pub struct SinglePrivilegeEditArgs {
|
||||
/// The MySQL database to edit privileges for
|
||||
/// The `MySQL` database to edit privileges for
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_database_completer)))]
|
||||
#[arg(
|
||||
value_name = "DB_NAME",
|
||||
@@ -76,7 +76,7 @@ pub struct SinglePrivilegeEditArgs {
|
||||
)]
|
||||
pub db_name: Option<MySQLDatabase>,
|
||||
|
||||
/// The MySQL database to edit privileges for
|
||||
/// The `MySQL` database to edit privileges for
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
#[arg(value_name = "USER_NAME")]
|
||||
pub user_name: Option<MySQLUser>,
|
||||
@@ -212,13 +212,13 @@ pub async fn edit_database_privileges(
|
||||
response => return erroneous_server_response(response),
|
||||
};
|
||||
|
||||
let diffs: BTreeSet<DatabasePrivilegesDiff> = if !privs.is_empty() {
|
||||
let privileges_to_change = parse_privilege_tables(&privs)?;
|
||||
create_or_modify_privilege_rows(&existing_privilege_rows, &privileges_to_change)?
|
||||
} else {
|
||||
let diffs: BTreeSet<DatabasePrivilegesDiff> = if privs.is_empty() {
|
||||
let privileges_to_change =
|
||||
edit_privileges_with_editor(&existing_privilege_rows, use_database.as_ref())?;
|
||||
diff_privileges(&existing_privilege_rows, &privileges_to_change)
|
||||
} else {
|
||||
let privileges_to_change = parse_privilege_tables(&privs)?;
|
||||
create_or_modify_privilege_rows(&existing_privilege_rows, &privileges_to_change)?
|
||||
};
|
||||
|
||||
let database_existence_map = databases_exist(&mut server_connection, &diffs).await?;
|
||||
@@ -306,12 +306,12 @@ pub async fn edit_database_privileges(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
@@ -328,8 +328,7 @@ fn parse_privilege_tables(
|
||||
priv_edit_entry
|
||||
.as_database_privileges_diff()
|
||||
.context(format!(
|
||||
"Failed parsing database privileges: `{}`",
|
||||
priv_edit_entry
|
||||
"Failed parsing database privileges: `{priv_edit_entry}`"
|
||||
))
|
||||
})
|
||||
.collect::<anyhow::Result<BTreeSet<DatabasePrivilegeRowDiff>>>()
|
||||
@@ -352,7 +351,7 @@ fn edit_privileges_with_editor(
|
||||
|
||||
match result {
|
||||
None => Ok(privilege_data.to_vec()),
|
||||
Some(result) => parse_privilege_data_from_editor_content(result)
|
||||
Some(result) => parse_privilege_data_from_editor_content(&result)
|
||||
.context("Could not parse privilege data from editor"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct LockUserArgs {
|
||||
/// The MySQL user(s) to loc
|
||||
/// The `MySQL` user(s) to loc
|
||||
#[arg(num_args = 1.., value_name = "USER_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
username: Vec<MySQLUser>,
|
||||
@@ -36,7 +36,7 @@ pub async fn lock_users(
|
||||
anyhow::bail!("No usernames provided");
|
||||
}
|
||||
|
||||
let message = Request::LockUsers(args.username.to_owned());
|
||||
let message = Request::LockUsers(args.username.clone());
|
||||
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
@@ -61,13 +61,13 @@ pub async fn lock_users(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|res| res.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct PasswdUserArgs {
|
||||
/// The MySQL user whose password is to be changed
|
||||
/// The `MySQL` user whose password is to be changed
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
#[arg(value_name = "USER_NAME")]
|
||||
username: MySQLUser,
|
||||
@@ -41,9 +41,9 @@ pub struct PasswdUserArgs {
|
||||
|
||||
pub fn read_password_from_stdin_with_double_check(username: &MySQLUser) -> anyhow::Result<String> {
|
||||
Password::new()
|
||||
.with_prompt(format!("New MySQL password for user '{}'", username))
|
||||
.with_prompt(format!("New MySQL password for user '{username}'"))
|
||||
.with_confirmation(
|
||||
format!("Retype new MySQL password for user '{}'", username),
|
||||
format!("Retype new MySQL password for user '{username}'"),
|
||||
"Passwords do not match",
|
||||
)
|
||||
.interact()
|
||||
@@ -55,7 +55,7 @@ pub async fn passwd_user(
|
||||
mut server_connection: ClientToServerMessageStream,
|
||||
) -> anyhow::Result<()> {
|
||||
// TODO: create a "user" exists check" command
|
||||
let message = Request::ListUsers(Some(vec![args.username.to_owned()]));
|
||||
let message = Request::ListUsers(Some(vec![args.username.clone()]));
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
anyhow::bail!(err);
|
||||
@@ -91,7 +91,7 @@ pub async fn passwd_user(
|
||||
read_password_from_stdin_with_double_check(&args.username)?
|
||||
};
|
||||
|
||||
let message = Request::PasswdUser((args.username.to_owned(), password));
|
||||
let message = Request::PasswdUser((args.username.clone(), password));
|
||||
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
@@ -111,7 +111,7 @@ pub async fn passwd_user(
|
||||
ValidationError::AuthorizationError(_)
|
||||
))
|
||||
) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
@@ -18,7 +18,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct ShowDbArgs {
|
||||
/// The MySQL database(s) to show
|
||||
/// The `MySQL` database(s) to show
|
||||
#[arg(num_args = 0.., value_name = "DB_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_database_completer)))]
|
||||
name: Vec<MySQLDatabase>,
|
||||
@@ -39,7 +39,7 @@ pub async fn show_databases(
|
||||
let message = if args.name.is_empty() {
|
||||
Request::ListDatabases(None)
|
||||
} else {
|
||||
Request::ListDatabases(Some(args.name.to_owned()))
|
||||
Request::ListDatabases(Some(args.name.clone()))
|
||||
};
|
||||
|
||||
server_connection.send(message).await?;
|
||||
@@ -74,13 +74,13 @@ pub async fn show_databases(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if databases.values().any(|res| res.is_err()) {
|
||||
if databases.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct ShowPrivsArgs {
|
||||
/// The MySQL database(s) to show privileges for
|
||||
/// The `MySQL` database(s) to show privileges for
|
||||
#[arg(num_args = 0.., value_name = "DB_NAME")]
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_database_completer)))]
|
||||
name: Vec<MySQLDatabase>,
|
||||
@@ -42,7 +42,7 @@ pub async fn show_database_privileges(
|
||||
let message = if args.name.is_empty() {
|
||||
Request::ListPrivileges(None)
|
||||
} else {
|
||||
Request::ListPrivileges(Some(args.name.to_owned()))
|
||||
Request::ListPrivileges(Some(args.name.clone()))
|
||||
};
|
||||
server_connection.send(message).await?;
|
||||
|
||||
@@ -78,13 +78,13 @@ pub async fn show_database_privileges(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if privilege_data.values().any(|res| res.is_err()) {
|
||||
if privilege_data.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct ShowUserArgs {
|
||||
/// The MySQL user(s) to show
|
||||
/// The `MySQL` user(s) to show
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
#[arg(num_args = 0.., value_name = "USER_NAME")]
|
||||
username: Vec<MySQLUser>,
|
||||
@@ -35,7 +35,7 @@ pub async fn show_users(
|
||||
let message = if args.username.is_empty() {
|
||||
Request::ListUsers(None)
|
||||
} else {
|
||||
Request::ListUsers(Some(args.username.to_owned()))
|
||||
Request::ListUsers(Some(args.username.clone()))
|
||||
};
|
||||
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
@@ -73,13 +73,13 @@ pub async fn show_users(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if users.values().any(|result| result.is_err()) {
|
||||
if users.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ use crate::{
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
pub struct UnlockUserArgs {
|
||||
/// The MySQL user(s) to unlock
|
||||
/// The `MySQL` user(s) to unlock
|
||||
#[cfg_attr(not(feature = "suid-sgid-mode"), arg(add = ArgValueCompleter::new(mysql_user_completer)))]
|
||||
#[arg(num_args = 1.., value_name = "USER_NAME")]
|
||||
username: Vec<MySQLUser>,
|
||||
@@ -36,7 +36,7 @@ pub async fn unlock_users(
|
||||
anyhow::bail!("No usernames provided");
|
||||
}
|
||||
|
||||
let message = Request::UnlockUsers(args.username.to_owned());
|
||||
let message = Request::UnlockUsers(args.username.clone());
|
||||
|
||||
if let Err(err) = server_connection.send(message).await {
|
||||
server_connection.close().await.ok();
|
||||
@@ -61,13 +61,13 @@ pub async fn unlock_users(
|
||||
))
|
||||
)
|
||||
}) {
|
||||
print_authorization_owner_hint(&mut server_connection).await?
|
||||
print_authorization_owner_hint(&mut server_connection).await?;
|
||||
}
|
||||
}
|
||||
|
||||
server_connection.send(Request::Exit).await?;
|
||||
|
||||
if result.values().any(|result| result.is_err()) {
|
||||
if result.values().any(std::result::Result::is_err) {
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user