mysqladm/client/commands/
create_db.rs1use clap::Parser;
2use futures_util::SinkExt;
3use tokio_stream::StreamExt;
4
5use crate::{
6 client::commands::erroneous_server_response,
7 core::{
8 protocol::{
9 ClientToServerMessageStream, Request, Response, print_create_databases_output_status,
10 print_create_databases_output_status_json,
11 },
12 types::MySQLDatabase,
13 },
14};
15
16#[derive(Parser, Debug, Clone)]
17pub struct CreateDbArgs {
18 #[arg(num_args = 1..)]
20 name: Vec<MySQLDatabase>,
21
22 #[arg(short, long)]
24 json: bool,
25}
26
27pub async fn create_databases(
28 args: CreateDbArgs,
29 mut server_connection: ClientToServerMessageStream,
30) -> anyhow::Result<()> {
31 if args.name.is_empty() {
32 anyhow::bail!("No database names provided");
33 }
34
35 let message = Request::CreateDatabases(args.name.to_owned());
36 server_connection.send(message).await?;
37
38 let result = match server_connection.next().await {
39 Some(Ok(Response::CreateDatabases(result))) => result,
40 response => return erroneous_server_response(response),
41 };
42
43 server_connection.send(Request::Exit).await?;
44
45 if args.json {
46 print_create_databases_output_status_json(&result);
47 } else {
48 print_create_databases_output_status(&result);
49 }
50
51 Ok(())
52}