use core::fmt::{Display, Formatter};
use std::fmt;
use crate::pg_sys;
use crate::trigger_support::{PgTriggerError, TriggerEvent};
pub enum PgTriggerWhen {
Before,
After,
InsteadOf,
}
impl TryFrom<TriggerEvent> for PgTriggerWhen {
type Error = PgTriggerError;
fn try_from(event: TriggerEvent) -> Result<Self, Self::Error> {
match event.0 & pg_sys::TRIGGER_EVENT_TIMINGMASK {
pg_sys::TRIGGER_EVENT_BEFORE => Ok(Self::Before),
pg_sys::TRIGGER_EVENT_AFTER => Ok(Self::After),
pg_sys::TRIGGER_EVENT_INSTEAD => Ok(Self::InsteadOf),
v => Err(PgTriggerError::InvalidPgTriggerWhen(v)),
}
}
}
impl Display for PgTriggerWhen {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.write_str(match self {
PgTriggerWhen::Before => "BEFORE",
PgTriggerWhen::After => "AFTER",
PgTriggerWhen::InsteadOf => "INSTEAD OF",
})
}
}