mysqladm/cli/mysql_admutils_compatibility/
error_messages.rs

1use crate::core::protocol::{
2    CreateDatabaseError, CreateUserError, DbOrUser, DropDatabaseError, DropUserError,
3    GetDatabasesPrivilegeDataError, ListUsersError,
4};
5
6pub fn name_validation_error_to_error_message(name: &str, db_or_user: DbOrUser) -> String {
7    let argv0 = std::env::args().next().unwrap_or_else(|| match db_or_user {
8        DbOrUser::Database => "mysql-dbadm".to_string(),
9        DbOrUser::User => "mysql-useradm".to_string(),
10    });
11
12    format!(
13        concat!(
14            "{}: {} name '{}' contains invalid characters.\n",
15            "Only A-Z, a-z, 0-9, _ (underscore) and - (dash) permitted. Skipping.",
16        ),
17        argv0,
18        db_or_user.capitalized(),
19        name,
20    )
21}
22
23pub fn owner_validation_error_message(name: &str, db_or_user: DbOrUser) -> String {
24    format!(
25        "You are not in charge of mysql-{}: '{}'.  Skipping.",
26        db_or_user.lowercased(),
27        name
28    )
29}
30
31pub fn handle_create_user_error(error: CreateUserError, name: &str) {
32    let argv0 = std::env::args()
33        .next()
34        .unwrap_or_else(|| "mysql-useradm".to_string());
35    match error {
36        CreateUserError::SanitizationError(_) => {
37            eprintln!(
38                "{}",
39                name_validation_error_to_error_message(name, DbOrUser::User)
40            );
41        }
42        CreateUserError::OwnershipError(_) => {
43            eprintln!("{}", owner_validation_error_message(name, DbOrUser::User));
44        }
45        CreateUserError::MySqlError(_) | CreateUserError::UserAlreadyExists => {
46            eprintln!("{}: Failed to create user '{}'.", argv0, name);
47        }
48    }
49}
50
51pub fn handle_drop_user_error(error: DropUserError, name: &str) {
52    let argv0 = std::env::args()
53        .next()
54        .unwrap_or_else(|| "mysql-useradm".to_string());
55    match error {
56        DropUserError::SanitizationError(_) => {
57            eprintln!(
58                "{}",
59                name_validation_error_to_error_message(name, DbOrUser::User)
60            );
61        }
62        DropUserError::OwnershipError(_) => {
63            eprintln!("{}", owner_validation_error_message(name, DbOrUser::User));
64        }
65        DropUserError::MySqlError(_) | DropUserError::UserDoesNotExist => {
66            eprintln!("{}: Failed to delete user '{}'.", argv0, name);
67        }
68    }
69}
70
71pub fn handle_list_users_error(error: ListUsersError, name: &str) {
72    let argv0 = std::env::args()
73        .next()
74        .unwrap_or_else(|| "mysql-useradm".to_string());
75    match error {
76        ListUsersError::SanitizationError(_) => {
77            eprintln!(
78                "{}",
79                name_validation_error_to_error_message(name, DbOrUser::User)
80            );
81        }
82        ListUsersError::OwnershipError(_) => {
83            eprintln!("{}", owner_validation_error_message(name, DbOrUser::User));
84        }
85        ListUsersError::UserDoesNotExist => {
86            eprintln!(
87                "{}: User '{}' does not exist. You must create it first.",
88                argv0, name,
89            );
90        }
91        ListUsersError::MySqlError(_) => {
92            eprintln!("{}: Failed to look up password for user '{}'", argv0, name);
93        }
94    }
95}
96
97// ----------------------------------------------------------------------------
98
99pub fn handle_create_database_error(error: CreateDatabaseError, name: &str) {
100    let argv0 = std::env::args()
101        .next()
102        .unwrap_or_else(|| "mysql-dbadm".to_string());
103    match error {
104        CreateDatabaseError::SanitizationError(_) => {
105            eprintln!(
106                "{}",
107                name_validation_error_to_error_message(name, DbOrUser::Database)
108            );
109        }
110        CreateDatabaseError::OwnershipError(_) => {
111            eprintln!(
112                "{}",
113                owner_validation_error_message(name, DbOrUser::Database)
114            );
115        }
116        CreateDatabaseError::MySqlError(_) => {
117            eprintln!("{}: Cannot create database '{}'.", argv0, name);
118        }
119        CreateDatabaseError::DatabaseAlreadyExists => {
120            eprintln!("{}: Database '{}' already exists.", argv0, name);
121        }
122    }
123}
124
125pub fn handle_drop_database_error(error: DropDatabaseError, name: &str) {
126    let argv0 = std::env::args()
127        .next()
128        .unwrap_or_else(|| "mysql-dbadm".to_string());
129    match error {
130        DropDatabaseError::SanitizationError(_) => {
131            eprintln!(
132                "{}",
133                name_validation_error_to_error_message(name, DbOrUser::Database)
134            );
135        }
136        DropDatabaseError::OwnershipError(_) => {
137            eprintln!(
138                "{}",
139                owner_validation_error_message(name, DbOrUser::Database)
140            );
141        }
142        DropDatabaseError::MySqlError(_) => {
143            eprintln!("{}: Cannot drop database '{}'.", argv0, name);
144        }
145        DropDatabaseError::DatabaseDoesNotExist => {
146            eprintln!("{}: Database '{}' doesn't exist.", argv0, name);
147        }
148    }
149}
150
151pub fn format_show_database_error_message(
152    error: GetDatabasesPrivilegeDataError,
153    name: &str,
154) -> String {
155    let argv0 = std::env::args()
156        .next()
157        .unwrap_or_else(|| "mysql-dbadm".to_string());
158
159    match error {
160        GetDatabasesPrivilegeDataError::SanitizationError(_) => {
161            name_validation_error_to_error_message(name, DbOrUser::Database)
162        }
163        GetDatabasesPrivilegeDataError::OwnershipError(_) => {
164            owner_validation_error_message(name, DbOrUser::Database)
165        }
166        GetDatabasesPrivilegeDataError::MySqlError(err) => {
167            format!(
168                "{}: Failed to look up privileges for database '{}': {}",
169                argv0, name, err
170            )
171        }
172        GetDatabasesPrivilegeDataError::DatabaseDoesNotExist => {
173            format!("{}: Database '{}' doesn't exist.", argv0, name)
174        }
175    }
176}