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>;