use std::path::PathBuf;
use thiserror::Error;
#[non_exhaustive]
#[derive(Error, Debug)]
pub enum Error {
#[error(transparent)]
#[cfg(feature = "cli")]
Clap(#[from] clap::error::Error),
#[error("Failed to read cargo metadata: {0}")]
Metadata(#[from] cargo_metadata::Error),
#[error(transparent)]
Json(#[from] serde_json::Error),
#[error(transparent)]
Toml(#[from] toml::de::Error),
#[error("Failed to parse config: {0}")]
FailedToParseJsonConfig(serde_json::Error),
#[error("Failed to deserialize config from `package.metadata.packager` in Cargo.toml: {0}")]
FailedToParseJsonConfigCargoToml(serde_json::Error),
#[error("Failed to parse config: {0}")]
FailedToParseTomlConfig(Box<toml::de::Error>),
#[error("Failed to parse Cargo.toml: {0}")]
FailedToParseCargoToml(Box<toml::de::Error>),
#[error("Failed to parse package.json: {0}")]
FailedToParsePacakgeJson(serde_json::Error),
#[error("Failed to parse config at {0}: {1}")]
FailedToParseJsonConfigFromPath(PathBuf, serde_json::Error),
#[error("Failed to parse config at {0}: {1}")]
FailedToParseTomlConfigFromPath(PathBuf, Box<toml::de::Error>),
#[error("I/O Error ({0}): {1}")]
IoWithPath(PathBuf, std::io::Error),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Packaging(#[from] crate::Error),
}
pub type Result<T> = std::result::Result<T, Error>;