mysqladm/cli/mysql_admutils_compatibility/
error_messages.rs1use 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
97pub 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}