x402curl 0.1.0

curl with automatic x402 payment handling
use std::process::ExitCode;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum X402Error {
    #[error("General error: {0}")]
    General(String),

    #[error("Network error: {0}")]
    Network(#[from] reqwest::Error),

    #[error("Middleware error: {0}")]
    Middleware(#[from] reqwest_middleware::Error),

    #[error("Payment error: {0}")]
    Payment(String),

    #[error("HTTP error: {0}")]
    Http(String),

    #[error("Configuration error: {0}")]
    Config(String),
}

impl X402Error {
    pub fn exit_code(&self) -> ExitCode {
        match self {
            X402Error::General(_) => ExitCode::from(1),
            X402Error::Network(_) => ExitCode::from(2),
            X402Error::Middleware(_) => ExitCode::from(2),
            X402Error::Payment(_) => ExitCode::from(3),
            X402Error::Http(_) => ExitCode::from(4),
            X402Error::Config(_) => ExitCode::from(5),
        }
    }

    pub fn code_number(&self) -> u8 {
        match self {
            X402Error::General(_) => 1,
            X402Error::Network(_) => 2,
            X402Error::Middleware(_) => 2,
            X402Error::Payment(_) => 3,
            X402Error::Http(_) => 4,
            X402Error::Config(_) => 5,
        }
    }
}