#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum BobError {
#[error("{context}: {source}")]
Io {
context: &'static str,
#[source]
source: std::io::Error,
},
#[error("install child {stream} pipe was not captured")]
PipeNotCaptured {
stream: &'static str,
},
#[error("keychain access failed: {0}")]
Keychain(#[from] keyring::Error),
#[error("auth-state serialization failed: {0}")]
Serialize(#[from] serde_json::Error),
#[error("{0}")]
Invalid(String),
#[error("bob requires Node.js {minimum}+ — {detail}. Install Node {minimum} or newer (e.g. `nvm install {minimum}`), then reinstall or relaunch.")]
NodeIncompatible {
minimum: String,
detail: String,
},
#[error("could not determine the application data directory")]
NoDataDir,
#[error(transparent)]
Stream(#[from] cli_stream::StreamError),
}