#[non_exhaustive]pub enum Error {
Show 18 variants
CliNotFound,
VersionMismatch {
found: String,
required: String,
},
JsonRpcModeNotSupported,
SpawnFailed(Error),
ProcessExited {
code: Option<i32>,
stderr: String,
},
ParseError {
message: String,
line: String,
},
JsonRpcError {
code: i64,
message: String,
data: Option<Value>,
},
ProtocolError(String),
AuthRequired(String),
AuthFailed(String),
Io(Error),
Json(Error),
NotConnected,
Transport(String),
Config(String),
ImageValidation(String),
Timeout(String),
TurnInProgress,
}Expand description
All errors that can occur when using gemini-cli-sdk.
The enum is #[non_exhaustive] so that new variants can be added in minor
releases without breaking downstream match arms.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
CliNotFound
The gemini binary could not be located on PATH.
VersionMismatch
The located binary is older than the minimum required version.
JsonRpcModeNotSupported
The CLI binary does not accept --experimental-acp (JSON-RPC mode).
SpawnFailed(Error)
tokio::process::Command::spawn failed.
This variant carries the underlying std::io::Error as a source
(accessible via std::error::Error::source) but does not generate a
blanket From<std::io::Error> impl — that is reserved for Error::Io.
ProcessExited
The Gemini subprocess terminated unexpectedly.
ParseError
A line from the subprocess could not be parsed as valid JSON.
JsonRpcError
The server returned a JSON-RPC error object.
ProtocolError(String)
The wire protocol was violated (unexpected message shape, missing required field, etc.).
AuthRequired(String)
The CLI requires authentication before the JSON-RPC server starts.
AuthFailed(String)
Authentication was attempted but the credentials were rejected.
Io(Error)
A low-level I/O error from reading or writing to the subprocess pipes.
This is the blanket conversion target for std::io::Error via ?.
Json(Error)
A JSON serialisation/deserialisation error.
NotConnected
A method was called before [Client::connect] completed successfully.
Transport(String)
An error originating in the transport layer (framing, flushing, etc.).
Config(String)
The supplied configuration is invalid.
ImageValidation(String)
An image path or content failed validation.
Timeout(String)
An operation exceeded its allotted time.
TurnInProgress
A send_content call was made while a previous turn is still streaming.
The Gemini CLI uses a single shared notification stream per session.
Concurrent send_content calls would contend on the internal Mutex,
causing the second call to silently hang until the first completes.
This variant surfaces the conflict immediately instead.
Implementations§
Source§impl Error
impl Error
Sourcepub fn is_process_exit(&self) -> bool
pub fn is_process_exit(&self) -> bool
Returns true if this error indicates that the Gemini subprocess has
exited.
§Examples
use gemini_cli_sdk::errors::Error;
let err = Error::ProcessExited { code: Some(1), stderr: "fatal".into() };
assert!(err.is_process_exit());
assert!(!Error::NotConnected.is_process_exit());Sourcepub fn is_retriable(&self) -> bool
pub fn is_retriable(&self) -> bool
Returns true if the operation that produced this error is safe to
retry without modification.
Retriable errors are transient I/O failures, timeouts, and transport disruptions.
§Examples
use gemini_cli_sdk::errors::Error;
assert!(Error::Timeout("read".into()).is_retriable());
assert!(!Error::CliNotFound.is_retriable());Sourcepub fn is_auth_error(&self) -> bool
pub fn is_auth_error(&self) -> bool
Returns true if this is an authentication-related error.
§Examples
use gemini_cli_sdk::errors::Error;
assert!(Error::AuthRequired("login needed".into()).is_auth_error());
assert!(Error::AuthFailed("bad token".into()).is_auth_error());
assert!(!Error::NotConnected.is_auth_error());Sourcepub fn is_jsonrpc_error(&self) -> bool
pub fn is_jsonrpc_error(&self) -> bool
Returns true if this error originated in the JSON-RPC protocol layer.
§Examples
use gemini_cli_sdk::errors::Error;
let rpc = Error::JsonRpcError { code: -32600, message: "Invalid Request".into(), data: None };
assert!(rpc.is_jsonrpc_error());
assert!(Error::ProtocolError("bad frame".into()).is_jsonrpc_error());
assert!(!Error::NotConnected.is_jsonrpc_error());Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
Auto Trait Implementations§
impl Freeze for Error
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl UnsafeUnpin for Error
impl !UnwindSafe for Error
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more