use syn::{Expr, Lit, MetaNameValue};
pub fn generate_placeholder(database: &str) -> String {
match database {
"postgres" => "${index}".to_string(),
"mysql" | "mariadb" => "?".to_string(),
"sqlite" => "?".to_string(),
"mssql" => "@p{index}".to_string(),
_ => panic!("未支持的数据库类型"),
}
}
pub fn name_value_to_string(name_value: &MetaNameValue) -> Option<String> {
if let Expr::Lit(value) = &name_value.value {
if let Lit::Str(val) = &value.lit {
return Some(val.value());
}
}
None
}
pub fn name_value_to_bool(name_value: &MetaNameValue) -> Option<bool> {
if let Expr::Lit(value) = &name_value.value {
if let Lit::Bool(val) = &value.lit {
return Some(val.value());
}
}
None
}
pub fn from_name_value<T>(name_value: &MetaNameValue) -> Option<T>
where
T: From<Lit>,
{
if let Expr::Lit(value) = &name_value.value {
return Some(T::from(value.lit.clone()));
}
None
}