use std::fmt::{Display, Formatter};
use std::result::Result as StdResult;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[repr(u16)]
pub enum Error {
IndexSize = 1,
StringSize,
HierarchyRequest,
WrongDocument,
InvalidCharacter,
NoDataAllowed,
NoModificationAllowed,
NotFound,
NotSupported,
InUseAttribute,
InvalidState,
Syntax,
InvalidModification,
Namespace,
InvalidAccess,
}
pub type Result<T> = StdResult<T, Error>;
pub(crate) const MSG_INVALID_NODE_TYPE: &str =
"The node `self` is not of the type expected by this method.";
pub(crate) const MSG_INVALID_EXTENSION: &str =
"This node's extension does not match it's node type.";
pub(crate) const MSG_INVALID_NAME: &str = "The provided value could not be parsed into a `Name`.";
pub(crate) const MSG_NO_PARENT_NODE: &str = "This node is missing a `parent_node` value.";
#[allow(dead_code)]
pub(crate) const MSG_WRONG_DOCUMENT: &str =
"Cannot append or insert a child node created in a different document.";
pub(crate) const MSG_INDEX_ERROR: &str = "Either `offset` or `count` invalid for string operation.";
pub(crate) const MSG_WEAK_REF: &str = "Could not upgrade a weak reference.";
pub(crate) const MSG_DUPLICATE_ID: &str =
"Violation of `xml:id` §4, attempt to insert duplicate ID value.";
impl Display for Error {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", match self {
Error::IndexSize => "Either `index` or `size` is negative, or greater than the allowed value",
Error::StringSize => "The specified range of text does not fit into a DOMString",
Error::HierarchyRequest => "An attempt insert a node somewhere it doesn't belong",
Error::WrongDocument => "An attempt to use a node in a different document than the one that created it",
Error::InvalidCharacter => "An invalid or illegal character was specified, such as in a name",
Error::NoDataAllowed => "An attempt to add data for a node which does not support data",
Error::NoModificationAllowed => "An attempt is made to modify an object where modifications are not allowed",
Error::NotFound => "An attempt is made to reference a node in a context where it does not exist",
Error::NotSupported => "The implementation does not support the requested type of object or operation",
Error::InUseAttribute => "An attempt was made to add an attribute that is already in use elsewhere",
Error::InvalidState => "An attempt is made to use an object that is not, or is no longer, usable",
Error::Syntax => "An invalid or illegal string was specified",
Error::InvalidModification => "An attempt was made to modify the type of the underlying object",
Error::Namespace => "An attempt was made to create or change an object in a way which is incorrect with regard to namespaces",
Error::InvalidAccess => "A parameter or an operation is not supported by the underlying object",
})
}
}
impl std::error::Error for Error {}
impl<T> From<Error> for Result<T> {
fn from(val: Error) -> Self {
Err(val)
}
}