use thiserror::Error;
#[derive(Debug, Error, PartialEq, Clone, Default)]
#[doc(hidden)]
pub enum LexError {
#[default]
#[error("keychain parser lex")]
Other,
}
#[derive(Debug, Error)]
pub enum Error {
#[error("unknown keychain item class '{0}'")]
ParseUnknownClass(String),
#[error("unknown keychain item attribute name '{0}'")]
ParseUnknownAttributeName(String),
#[error("unknown keychain item attribute type '{0}'")]
ParseUnknownAttributeType(String),
#[error("unable to parse quoted value '{0}'")]
ParseNotQuoted(String),
#[error("expecting close quote for attribute name but got '{0}'")]
ParseAttributeNameQuote(String),
#[error("unable to parse attribute name '{0}'")]
ParseNotAttributeName(String),
#[error("unable to parse attribute type '{0}'")]
ParseNotAttributeType(String),
#[error("unable to parse number '{0}'")]
ParseNotNumber(String),
#[error("unable to parse value '{0}'")]
ParseValue(String),
#[error("unable to convert octal escape '{0}' to char")]
InvalidOctalEscape(String),
#[error("expecting equals sign (=) while parsing keychain dump")]
ParseExpectsEquals,
#[error(transparent)]
ParseInt(#[from] std::num::ParseIntError),
#[error(transparent)]
Plist(#[from] plist::Error),
#[error(transparent)]
Lex(#[from] LexError),
}