use core::borrow::Borrow;
use crate::ValidatorIdError;
use crate::internal::DottedIdentifierError;
use crate::internal::validate_dotted_identifier;
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub struct ValidatorId(
&'static str,
);
impl ValidatorId {
#[must_use]
#[inline]
pub const fn new(value: &'static str) -> Self {
match Self::try_new(value) {
Ok(id) => id,
Err(_) => panic!("invalid validator ID"),
}
}
#[inline]
pub const fn try_new(value: &'static str) -> Result<Self, ValidatorIdError> {
match validate_dotted_identifier(value) {
Ok(()) => Ok(Self(value)),
Err(DottedIdentifierError::Empty) => Err(ValidatorIdError::Empty),
Err(DottedIdentifierError::EmptySegment) => Err(ValidatorIdError::EmptySegment),
Err(DottedIdentifierError::InvalidSegment) => Err(ValidatorIdError::InvalidSegment),
}
}
#[must_use]
#[inline]
pub const fn as_str(self) -> &'static str {
self.0
}
}
impl Borrow<str> for ValidatorId {
#[inline]
fn borrow(&self) -> &str {
self.0
}
}