doido_generators/commands/
dbconsole.rs1use std::process::Command;
5
6pub fn client_command(database_url: &str) -> Option<(String, Vec<String>)> {
8 if let Some(path) = database_url
9 .strip_prefix("sqlite://")
10 .or_else(|| database_url.strip_prefix("sqlite:"))
11 {
12 Some(("sqlite3".to_string(), vec![path.to_string()]))
13 } else if database_url.starts_with("postgres://") || database_url.starts_with("postgresql://") {
14 Some(("psql".to_string(), vec![database_url.to_string()]))
15 } else if database_url.starts_with("mysql://") {
16 Some(("mysql".to_string(), vec![database_url.to_string()]))
17 } else {
18 None
19 }
20}
21
22pub fn run(database_url: &str) {
24 match client_command(database_url) {
25 Some((program, args)) => {
26 let _ = Command::new(program).args(args).status();
27 }
28 None => doido_core::tracing::error!("no known db client for URL: {database_url}"),
29 }
30}