use std::fmt::Debug;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;
use thiserror::Error;
use crate::BindErrorKind;
use crate::RegistrationSource;
use crate::ValidatorId;
#[must_use]
#[derive(Clone, Error)]
#[non_exhaustive]
pub enum ValidatorRegistryError {
#[error("duplicate validator ID {id} from {sources:?}")]
DuplicateId {
id: &'static str,
sources: Vec<RegistrationSource>,
},
#[error("invalid descriptor for validator ID {id:?} from {registration_source:?}: {kind}")]
InvalidDescriptor {
id: ValidatorId,
registration_source: RegistrationSource,
kind: BindErrorKind,
dependency: Option<String>,
},
}
impl Debug for ValidatorRegistryError {
fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
match self {
Self::DuplicateId { id, sources } => formatter
.debug_struct("DuplicateId")
.field("id", id)
.field("sources", sources)
.finish(),
Self::InvalidDescriptor {
id,
registration_source,
kind,
dependency,
} => formatter
.debug_struct("InvalidDescriptor")
.field("id", id)
.field("registration_source", registration_source)
.field("kind", kind)
.field("has_dependency", &dependency.is_some())
.finish(),
}
}
}