mysqladm/core/protocol/commands/
drop_databases.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::json;
5
6use crate::core::{
7 protocol::request_validation::{DbOrUser, NameValidationError, OwnerValidationError},
8 types::MySQLDatabase,
9};
10
11pub type DropDatabasesRequest = Vec<MySQLDatabase>;
12
13pub type DropDatabasesResponse = BTreeMap<MySQLDatabase, Result<(), DropDatabaseError>>;
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16pub enum DropDatabaseError {
17 SanitizationError(NameValidationError),
18 OwnershipError(OwnerValidationError),
19 DatabaseDoesNotExist,
20 MySqlError(String),
21}
22
23pub fn print_drop_databases_output_status(output: &DropDatabasesResponse) {
24 for (database_name, result) in output {
25 match result {
26 Ok(()) => {
27 println!(
28 "Database '{}' dropped successfully.",
29 database_name.as_str()
30 );
31 }
32 Err(err) => {
33 println!("{}", err.to_error_message(database_name));
34 println!("Skipping...");
35 }
36 }
37 println!();
38 }
39}
40
41pub fn print_drop_databases_output_status_json(output: &DropDatabasesResponse) {
42 let value = output
43 .iter()
44 .map(|(name, result)| match result {
45 Ok(()) => (name.to_string(), json!({ "status": "success" })),
46 Err(err) => (
47 name.to_string(),
48 json!({
49 "status": "error",
50 "error": err.to_error_message(name),
51 }),
52 ),
53 })
54 .collect::<serde_json::Map<_, _>>();
55 println!(
56 "{}",
57 serde_json::to_string_pretty(&value)
58 .unwrap_or("Failed to serialize result to JSON".to_string())
59 );
60}
61
62impl DropDatabaseError {
63 pub fn to_error_message(&self, database_name: &MySQLDatabase) -> String {
64 match self {
65 DropDatabaseError::SanitizationError(err) => {
66 err.to_error_message(database_name, DbOrUser::Database)
67 }
68 DropDatabaseError::OwnershipError(err) => {
69 err.to_error_message(database_name, DbOrUser::Database)
70 }
71 DropDatabaseError::DatabaseDoesNotExist => {
72 format!("Database {} does not exist.", database_name)
73 }
74 DropDatabaseError::MySqlError(err) => {
75 format!("MySQL error: {}", err)
76 }
77 }
78 }
79}