xpather 0.2.0

A remake of sxd-xpath to teach myself more about parsing from scratch. Uses Regex, html5ever, and markup5ever
Documentation
use std::fmt;

use crate::ExprToken;


pub type Result<I> = std::result::Result<I, Error>;


#[derive(Debug, Clone)]
pub enum Error {
	Token,
	InputEmpty,
	TrailingSlash,
	MissingRightHandExpression,
	UnexpectedToken(ExprToken),
	InvalidValue(ValueError),
	CannotConvertNodeToValue,
	NodeDidNotContainText,
	UnableToEvaluate,
	InvalidXpath
}

impl fmt::Display for Error {
	fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
		use Error::*;

		match self {
			Token => write!(f, "Token Error"),
			InputEmpty => write!(f, "Empty Input"),
			TrailingSlash => write!(f, "Trailing Slash"),
			UnableToEvaluate => write!(f, "Unable to Evaluate"),
			InvalidXpath => write!(f, "Invalid Xpath"),
			MissingRightHandExpression => write!(f, "Missing Right Hand Expression"),
			CannotConvertNodeToValue => write!(f, "Cannot convert Node into Value"),
			NodeDidNotContainText => write!(f, "Node did not contain Text"),
			UnexpectedToken(v) => write!(f, "Unexpected Token: {:?}", v),
			InvalidValue(v) => write!(f, "Invalid Value: {:?}", v),
		}
	}
}


impl From<ValueError> for Error {
	fn from(err: ValueError) -> Error {
		Error::InvalidValue(err)
	}
}

#[derive(Debug, Clone)]
pub enum ValueError {
	Boolean,
	Number,
	String,
	Nodeset
}