use glaredb_error::{DbError, Result};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CastFailBehavior {
Error,
Null,
}
impl CastFailBehavior {
pub(crate) fn new_state(&self) -> CastErrorState {
CastErrorState {
behavior: *self,
error: None,
}
}
}
#[derive(Debug)]
pub struct CastErrorState {
behavior: CastFailBehavior,
error: Option<DbError>,
}
impl CastErrorState {
pub fn set_error<F>(&mut self, error_fn: F)
where
F: FnOnce() -> DbError,
{
if self.behavior == CastFailBehavior::Error && self.error.is_none() {
self.error = Some(error_fn())
}
}
pub fn into_result(self) -> Result<()> {
match self.error {
Some(err) => Err(err),
None => Ok(()),
}
}
}