feature connection alias

pull/129/head
susiyaki 3 years ago
parent 36b1da0afa
commit 88b70c1c33

@ -51,6 +51,7 @@ impl Default for Config {
Self { Self {
conn: vec![Connection { conn: vec![Connection {
r#type: DatabaseType::MySql, r#type: DatabaseType::MySql,
name: None,
user: Some("root".to_string()), user: Some("root".to_string()),
host: Some("localhost".to_string()), host: Some("localhost".to_string()),
port: Some(3306), port: Some(3306),
@ -67,6 +68,7 @@ impl Default for Config {
#[derive(Debug, Deserialize, Clone)] #[derive(Debug, Deserialize, Clone)]
pub struct Connection { pub struct Connection {
r#type: DatabaseType, r#type: DatabaseType,
name: Option<String>,
user: Option<String>, user: Option<String>,
host: Option<String>, host: Option<String>,
port: Option<u64>, port: Option<u64>,
@ -181,6 +183,7 @@ impl Connection {
pub fn database_url(&self) -> anyhow::Result<String> { pub fn database_url(&self) -> anyhow::Result<String> {
match self.r#type { match self.r#type {
DatabaseType::MySql => { DatabaseType::MySql => {
let name = self.name.as_ref().map_or(String::new(), |n| n.to_string());
let user = self let user = self
.user .user
.as_ref() .as_ref()
@ -199,24 +202,48 @@ impl Connection {
.map_or(String::new(), |p| p.to_string()); .map_or(String::new(), |p| p.to_string());
match self.database.as_ref() { match self.database.as_ref() {
Some(database) => Ok(format!( Some(database) => Ok(if name.is_empty() {
"mysql://{user}:{password}@{host}:{port}/{database}", format!(
user = user, "mysql://{user}:{password}@{host}:{port}/{database}",
password = password, user = user,
host = host, password = password,
port = port, host = host,
database = database port = port,
)), database = database
None => Ok(format!( )
"mysql://{user}:{password}@{host}:{port}", } else {
user = user, format!(
password = password, "[{name}] mysql://{user}:{password}@{host}:{port}/{database}",
host = host, name = name,
port = port, user = user,
)), password = password,
host = host,
port = port,
database = database
)
}),
None => Ok(if name.is_empty() {
format!(
"mysql://{user}:{password}@{host}:{port}",
user = user,
password = password,
host = host,
port = port,
)
} else {
format!(
"[{name}] mysql://{user}:{password}@{host}:{port}",
name = name,
user = user,
password = password,
host = host,
port = port,
)
}),
} }
} }
DatabaseType::Postgres => { DatabaseType::Postgres => {
let name = self.name.as_ref().map_or(String::new(), |n| n.to_string());
let user = self let user = self
.user .user
.as_ref() .as_ref()
@ -235,24 +262,48 @@ impl Connection {
.map_or(String::new(), |p| p.to_string()); .map_or(String::new(), |p| p.to_string());
match self.database.as_ref() { match self.database.as_ref() {
Some(database) => Ok(format!( Some(database) => Ok(if name.is_empty() {
"postgres://{user}:{password}@{host}:{port}/{database}", format!(
user = user, "postgres://{user}:{password}@{host}:{port}/{database}",
password = password, user = user,
host = host, password = password,
port = port, host = host,
database = database port = port,
)), database = database
None => Ok(format!( )
"postgres://{user}:{password}@{host}:{port}", } else {
user = user, format!(
password = password, "[{name}] postgres://{user}:{password}@{host}:{port}/{database}",
host = host, name = name,
port = port, user = user,
)), password = password,
host = host,
port = port,
database = database
)
}),
None => Ok(if name.is_empty() {
format!(
"postgres://{user}:{password}@{host}:{port}",
user = user,
password = password,
host = host,
port = port,
)
} else {
format!(
"[{name}] postgres://{user}:{password}@{host}:{port}",
name = name,
user = user,
password = password,
host = host,
port = port,
)
}),
} }
} }
DatabaseType::Sqlite => { DatabaseType::Sqlite => {
let name = self.name.as_ref().map_or(String::new(), |n| n.to_string());
let path = self.path.as_ref().map_or( let path = self.path.as_ref().map_or(
Err(anyhow::anyhow!("type sqlite needs the path field")), Err(anyhow::anyhow!("type sqlite needs the path field")),
|path| { |path| {
@ -260,7 +311,15 @@ impl Connection {
}, },
)?; )?;
Ok(format!("sqlite://{path}", path = path.to_str().unwrap())) Ok(if name.is_empty() {
format!("sqlite://{path}", path = path.to_str().unwrap())
} else {
format!(
"[{name}] sqlite://{path}",
name = name,
path = path.to_str().unwrap()
)
})
} }
} }
} }

Loading…
Cancel
Save