use crate::ToSqlConfig;
use syn::parse::{Parse, ParseStream};
use syn::Token;
#[derive(Debug, Clone, Hash, Eq, PartialEq)]
pub enum PgTriggerAttribute {
Sql(ToSqlConfig),
}
impl Parse for PgTriggerAttribute {
fn parse(input: ParseStream) -> Result<Self, syn::Error> {
let ident: syn::Ident = input.parse()?;
let found = match ident.to_string().as_str() {
"sql" => {
use crate::pgrx_attribute::ArgValue;
use syn::Lit;
let _eq: Token![=] = input.parse()?;
match input.parse::<ArgValue>()? {
ArgValue::Path(p) => Self::Sql(ToSqlConfig::from(p)),
ArgValue::Lit(Lit::Bool(b)) => Self::Sql(ToSqlConfig::from(b.value)),
ArgValue::Lit(Lit::Str(s)) => Self::Sql(ToSqlConfig::from(s)),
ArgValue::Lit(other) => {
return Err(syn::Error::new(
other.span(),
"expected boolean, path, or string literal",
))
}
}
}
e => {
return Err(syn::Error::new(
input.span(),
format!("Invalid option `{e}` inside `{ident} {input}`"),
));
}
};
Ok(found)
}
}