1
use serde::{Deserialize, Serialize};
2

            
3
use crate::core::{
4
    protocol::request_validation::{DbOrUser, NameValidationError, OwnerValidationError},
5
    types::MySQLUser,
6
};
7

            
8
pub type SetUserPasswordRequest = (MySQLUser, String);
9

            
10
pub type SetUserPasswordResponse = Result<(), SetPasswordError>;
11

            
12
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13
pub enum SetPasswordError {
14
    SanitizationError(NameValidationError),
15
    OwnershipError(OwnerValidationError),
16
    UserDoesNotExist,
17
    MySqlError(String),
18
}
19

            
20
pub fn print_set_password_output_status(output: &SetUserPasswordResponse, username: &MySQLUser) {
21
    match output {
22
        Ok(()) => {
23
            println!("Password for user '{}' set successfully.", username);
24
        }
25
        Err(err) => {
26
            println!("{}", err.to_error_message(username));
27
            println!("Skipping...");
28
        }
29
    }
30
}
31

            
32
impl SetPasswordError {
33
    pub fn to_error_message(&self, username: &MySQLUser) -> String {
34
        match self {
35
            SetPasswordError::SanitizationError(err) => {
36
                err.to_error_message(username, DbOrUser::User)
37
            }
38
            SetPasswordError::OwnershipError(err) => err.to_error_message(username, DbOrUser::User),
39
            SetPasswordError::UserDoesNotExist => {
40
                format!("User '{}' does not exist.", username)
41
            }
42
            SetPasswordError::MySqlError(err) => {
43
                format!("MySQL error: {}", err)
44
            }
45
        }
46
    }
47
}