keychain_parser 0.1.2

Parse the output of security(1) dump-keychain.
Documentation
//! Error type for the keychain parser.
use thiserror::Error;

/// Error lexing the keychain dump.
#[derive(Debug, Error, PartialEq, Clone, Default)]
#[doc(hidden)]
pub enum LexError {
    /// Generic lex error.
    #[default]
    #[error("keychain parser lex")]
    Other,
}

/// Error type for the keychain access module.
#[derive(Debug, Error)]
pub enum Error {
    /// Error generated when the class of an entry is unknown.
    #[error("unknown keychain item class '{0}'")]
    ParseUnknownClass(String),

    /// Error generated when an unknown attribute name is encountered.
    #[error("unknown keychain item attribute name '{0}'")]
    ParseUnknownAttributeName(String),

    /// Error generated when an unknown attribute type is encountered.
    #[error("unknown keychain item attribute type '{0}'")]
    ParseUnknownAttributeType(String),

    /// Error generated parsing a quoted blob.
    #[error("unable to parse quoted value '{0}'")]
    ParseNotQuoted(String),

    /// Error generated when a quoted attribute name
    /// was not terminated properly.
    #[error("expecting close quote for attribute name but got '{0}'")]
    ParseAttributeNameQuote(String),

    /// Error generated parsing an attribute name.
    #[error("unable to parse attribute name '{0}'")]
    ParseNotAttributeName(String),

    /// Error generated parsing an attribute type.
    #[error("unable to parse attribute type '{0}'")]
    ParseNotAttributeType(String),

    /// Error generated parsing an attribute value.
    #[error("unable to parse number '{0}'")]
    ParseNotNumber(String),

    /// Error generated parsing keychain dump when the parse could not
    /// parse an value.
    ///
    /// The value may be for an attribute or for `data:`.
    #[error("unable to parse value '{0}'")]
    ParseValue(String),

    /// Error generated converting an octal escape to a character.
    #[error("unable to convert octal escape '{0}' to char")]
    InvalidOctalEscape(String),

    /// Error generated when the assignment operator was expected.
    #[error("expecting equals sign (=) while parsing keychain dump")]
    ParseExpectsEquals,

    /// Error generated converting to integers.
    #[error(transparent)]
    ParseInt(#[from] std::num::ParseIntError),

    /// Error generated by the plist library.
    #[error(transparent)]
    Plist(#[from] plist::Error),

    /// Error generated lexing the keychain dump.
    #[error(transparent)]
    Lex(#[from] LexError),
}