use std::collections::HashMap;
use reinhardt_core::exception::DatabaseError;
use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
pub enum ModelFormError {
#[error("model form field '{field}' is forbidden")]
ForbiddenInput {
field: &'static str,
},
#[error("model form field validation failed")]
FieldValidation {
errors: HashMap<String, Vec<String>>,
},
#[error("required model field '{field}' is missing")]
MissingModelField {
field: &'static str,
},
#[error("model validation failed")]
ModelValidation {
errors: Vec<String>,
},
#[error("model form persistence failed: {source}")]
Persistence {
source: DatabaseError,
},
#[error("model form create persisted but hydration failed: {source}")]
PersistenceAfterCreate {
source: DatabaseError,
},
#[error("model form persistence is waiting for its transaction outcome")]
TransactionOutcomePending,
}
impl ModelFormError {
pub fn database_error(&self) -> Option<&DatabaseError> {
match self {
Self::Persistence { source } | Self::PersistenceAfterCreate { source } => Some(source),
Self::TransactionOutcomePending => None,
_ => None,
}
}
}