use thiserror::Error;
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Error)]
pub enum RepositoryError {
#[error("repository.duplicate")]
Duplicate,
#[error("repository.invalid_data")]
InvalidData,
#[error("repository.unavailable")]
Unavailable,
#[error("repository.missing_reference.{0}")]
MissingReference(&'static str),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn should_speak_machine_readable_codes() {
assert_eq!(
RepositoryError::Duplicate.to_string(),
"repository.duplicate"
);
assert_eq!(
RepositoryError::InvalidData.to_string(),
"repository.invalid_data"
);
assert_eq!(
RepositoryError::Unavailable.to_string(),
"repository.unavailable"
);
}
#[test]
fn should_name_the_field_whose_reference_is_missing() {
assert_eq!(
RepositoryError::MissingReference("customer_id").to_string(),
"repository.missing_reference.customer_id"
);
}
}