use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
pub enum NamespaceError {
#[error("Namespace cannot be empty")]
Empty,
#[error("Namespace length must be between 3 and 1000 characters, got {length}")]
LengthOutOfRange { length: usize },
#[error("Base namespace cannot be empty")]
EmptyBase,
#[error("Reverse domain name cannot be empty")]
EmptyReverseDomain,
#[error("Fragment cannot be empty after '#'")]
EmptyFragment,
#[error("Namespace '{namespace}' is not a registered namespace")]
InvalidRegisteredNamespace { namespace: String },
#[error("Reserved forbidden namespace '{namespace}' must not be used")]
ReservedForbiddenNamespace { namespace: String },
#[error("Reserved test namespace '{namespace}' must not be used")]
ReservedTestNamespace { namespace: String },
#[error("Unregistered namespace must contain a fragment")]
UnregisteredNamespaceMissingFragment,
#[error("Extension Segments must contain a fragment")]
ExtensionSegmentMissingFragment,
#[error("Language tag cannot be empty")]
EmptyLanguageTag,
#[error("Invalid language tag '{tag}': must be a valid BCP 47 language tag")]
InvalidLanguageTag { tag: String },
}