pkpass 1.1.0

Rust library for generate Apple Wallet Passes for iOS, WatchOS, MacOS.
Documentation
use thiserror::Error;
use x509_cert::der;
use zip::result::ZipError;

#[derive(Error, Debug)]
pub enum PassError {
    #[error("missing pass.json in package file")]
    MissingJson,
    #[error("pass writer already closed")]
    WriterClosed,
    #[error("failed to compress package: {0}")]
    Compression(ZipError),
    #[error("I/O error: {0}")]
    IO(std::io::Error),
    #[error("Error during JSON conversion: {0}")]
    Json(serde_json::Error),
    #[error("Failed in DER coding stack: {0}")]
    ASN1(der::Error),
    #[error("CMS error: {0}")]
    CmsBuilder(cms::builder::Error),
    #[error("Failed to parse certificate")]
    CertificateParse(rsa::pkcs8::Error),
}

impl From<rsa::pkcs8::Error> for PassError {
    fn from(err: rsa::pkcs8::Error) -> Self {
        PassError::CertificateParse(err)
    }
}

impl From<ZipError> for PassError {
    fn from(err: ZipError) -> Self {
        PassError::Compression(err)
    }
}

impl From<std::io::Error> for PassError {
    fn from(err: std::io::Error) -> Self {
        PassError::IO(err)
    }
}

impl From<serde_json::Error> for PassError {
    fn from(err: serde_json::Error) -> Self {
        PassError::Json(err)
    }
}

impl From<der::Error> for PassError {
    fn from(err: der::Error) -> Self {
        PassError::ASN1(err)
    }
}

impl From<cms::builder::Error> for PassError {
    fn from(err: cms::builder::Error) -> Self {
        PassError::CmsBuilder(err)
    }
}