boltffi_cli 0.22.1

CLI for BoltFFI - generate Swift, Kotlin, and WASM bindings from Rust
use crate::config::ConfigError;
use std::path::PathBuf;

#[derive(Debug, thiserror::Error)]
pub enum CliError {
    #[error("config error: {0}")]
    Config(#[from] ConfigError),

    #[error("boltffi.toml not found in current directory")]
    ConfigNotFound,

    #[error("no built libraries found for {platform}")]
    NoLibrariesFound { platform: String },

    #[error("command failed: {command}")]
    CommandFailed {
        command: String,
        status: Option<i32>,
    },

    #[error("failed to create directory {path}")]
    CreateDirectoryFailed {
        path: PathBuf,
        source: std::io::Error,
    },

    #[error("failed to copy file from {from} to {to}")]
    CopyFailed {
        from: PathBuf,
        to: PathBuf,
        source: std::io::Error,
    },

    #[error("failed to read file {path}")]
    ReadFailed {
        path: PathBuf,
        source: std::io::Error,
    },

    #[error("failed to write file {path}")]
    WriteFailed {
        path: PathBuf,
        source: std::io::Error,
    },

    #[error("xcframework creation failed")]
    XcframeworkFailed { source: std::io::Error },

    #[error("lipo failed for simulator fat library")]
    LipoFailed { source: std::io::Error },

    #[error("zip creation failed")]
    ZipFailed { source: std::io::Error },

    #[error("file not found: {0}")]
    FileNotFound(PathBuf),

    #[error("android ndk not found (set ANDROID_NDK_HOME or ANDROID_HOME/ANDROID_SDK_ROOT)")]
    AndroidNdkNotFound,

    #[error("invalid android ndk at {path}")]
    AndroidNdkInvalid { path: PathBuf },

    #[error("android ndk toolchain not found at {path}")]
    AndroidToolchainNotFound { path: PathBuf },

    #[error("unsupported language: {0}")]
    UnsupportedLanguage(String),

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

    #[error("build failed for targets: {targets:?}")]
    BuildFailed { targets: Vec<String> },
}

pub type Result<T> = std::result::Result<T, CliError>;