#[non_exhaustive]pub enum Error {
Transport(Box<Error>),
Connection(String),
Status(Box<Status>),
Http {
status: u16,
body: String,
},
Json(Box<Error>),
CommandRejected {
code: String,
message: String,
},
Auth(String),
InvalidRequest(String),
UnexpectedResponse(String),
Timeout,
}Expand description
The single error type for the whole Canton Rust SDK.
It is #[non_exhaustive] so new variants can be added without a breaking
change. Large upstream error types are boxed so that Result<T, Error>
stays cheap to move on the happy path.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Transport(Box<Error>)
gRPC transport failure (DNS, TCP, TLS, HTTP/2). Retriable.
Connection(String)
A non-gRPC connection failure (e.g. an HTTP/JSON or token-endpoint request that could not be sent). Retriable.
Status(Box<Status>)
The server returned a gRPC status. The full tonic::Status is kept so
callers can inspect the code, message, and metadata; see Error::code.
Http
A non-success HTTP response from the JSON API or a token endpoint.
Retriable for transient status codes (see Error::is_retriable).
Fields
Json(Box<Error>)
JSON (de)serialization error.
CommandRejected
A command was rejected by the ledger for business/interpretation reasons (as opposed to a transport failure). Not retriable.
Auth(String)
Authentication/authorization was rejected (bad or expired credentials).
Not retriable — a token-transport failure surfaces as Error::Connection
or Error::Http instead.
InvalidRequest(String)
A request precondition or configuration value was invalid before send.
UnexpectedResponse(String)
The server’s response was well-formed at the transport level but not what the protocol expects (e.g. a missing field, or a stream that ended unexpectedly). Not a caller-input error.
Timeout
The operation exceeded its configured deadline. Retriable.
Implementations§
Source§impl Error
impl Error
Sourcepub fn code(&self) -> Option<Code>
pub fn code(&self) -> Option<Code>
The gRPC status code, if this error originates from a gRPC status.
Sourcepub fn is_retriable(&self) -> bool
pub fn is_retriable(&self) -> bool
Whether retrying the operation may succeed.
Transient conditions are retriable: timeouts, transport/connection
failures, the transient gRPC codes (Unavailable, DeadlineExceeded,
ResourceExhausted, Aborted), and transient HTTP status codes
(408, 429, 5xx). Everything else — invalid input, auth rejection,
command rejection, NotFound/AlreadyExists, deserialization — is not.
Sourcepub fn error_info(&self) -> Option<ErrorInfo>
pub fn error_info(&self) -> Option<ErrorInfo>
The structured google.rpc.ErrorInfo carried by a gRPC status, when
present. Canton populates this with the machine-readable error reason
(e.g. DUPLICATE_COMMAND) plus context metadata — prefer it over
string-matching Display output. Returns None for
non-status errors or statuses without an ErrorInfo detail.
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
use the Display impl or to_string()
Auto Trait Implementations§
impl !RefUnwindSafe for Error
impl !UnwindSafe for Error
impl Freeze for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl UnsafeUnpin 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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request