[−][src]Enum thrift::Error
Error type returned by all runtime library functions.
thrift::Error
is used throughout this crate as well as in auto-generated
Rust code. It consists of four variants defined by convention across Thrift
implementations:
Transport
: errors encountered while operating on I/O channelsProtocol
: errors encountered during runtime-library processingApplication
: errors encountered within auto-generated codeUser
: IDL-defined exception structs
The Application
variant also functions as a catch-all: all handler errors
are automatically turned into application errors.
All error variants except Error::User
take an eponymous struct with two
required fields:
kind
: variant-specific enum identifying the error sub-typemessage
: human-readable error info string
kind
is defined by convention while message
is freeform. If none of the
enumerated kinds are suitable use Unknown
.
To simplify error creation convenience constructors are defined for all
variants, and conversions from their structs (thrift::TransportError
,
thrift::ProtocolError
and thrift::ApplicationError
into thrift::Error
.
Examples
Create a TransportError
.
use thrift::{TransportError, TransportErrorKind}; // explicit let err0: thrift::Result<()> = Err( thrift::Error::Transport( TransportError { kind: TransportErrorKind::TimedOut, message: format!("connection to server timed out") } ) ); // use conversion let err1: thrift::Result<()> = Err( thrift::Error::from( TransportError { kind: TransportErrorKind::TimedOut, message: format!("connection to server timed out") } ) ); // use struct constructor let err2: thrift::Result<()> = Err( thrift::Error::Transport( TransportError::new( TransportErrorKind::TimedOut, "connection to server timed out" ) ) ); // use error variant constructor let err3: thrift::Result<()> = Err( thrift::new_transport_error( TransportErrorKind::TimedOut, "connection to server timed out" ) );
Create an error from a string.
use thrift::{ApplicationError, ApplicationErrorKind}; // we just use `From::from` to convert a `String` into a `thrift::Error` let err0: thrift::Result<()> = Err( thrift::Error::from("This is an error") ); // err0 is equivalent to... let err1: thrift::Result<()> = Err( thrift::Error::Application( ApplicationError { kind: ApplicationErrorKind::Unknown, message: format!("This is an error") } ) );
Return an IDL-defined exception.
// Thrift IDL exception definition.
exception Xception {
1: i32 errorCode,
2: string message
}
use std::error::Error; use std::fmt; use std::fmt::{Display, Formatter}; // auto-generated by the Thrift compiler #[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)] pub struct Xception { pub error_code: Option<i32>, pub message: Option<String>, } // auto-generated by the Thrift compiler impl Error for Xception { fn description(&self) -> &str { "remote service threw Xception" } } // auto-generated by the Thrift compiler impl From<Xception> for thrift::Error { fn from(e: Xception) -> Self { thrift::Error::User(Box::new(e)) } } // auto-generated by the Thrift compiler impl Display for Xception { fn fmt(&self, f: &mut Formatter) -> fmt::Result { self.description().fmt(f) } } // in user code... let err: thrift::Result<()> = Err( thrift::Error::from(Xception { error_code: Some(1), message: None }) );
Variants
Transport(TransportError)
Errors encountered while operating on I/O channels.
These include connection closed and bind failure.
Protocol(ProtocolError)
Errors encountered during runtime-library processing.
These include message too large and unsupported protocol version.
Application(ApplicationError)
Errors encountered within auto-generated code, or when incoming or outgoing messages violate the Thrift spec.
These include out-of-order messages and missing required struct fields.
This variant also functions as a catch-all: errors from handler
functions are automatically returned as an ApplicationError
.
IDL-defined exception structs.
Methods
impl Error
[src]
pub fn read_application_error_from_in_protocol(
i: &mut dyn TInputProtocol
) -> Result<ApplicationError>
[src]
i: &mut dyn TInputProtocol
) -> Result<ApplicationError>
Create an ApplicationError
from its wire representation.
Application code should never call this method directly.
pub fn write_application_error_to_out_protocol(
e: &ApplicationError,
o: &mut dyn TOutputProtocol
) -> Result<()>
[src]
e: &ApplicationError,
o: &mut dyn TOutputProtocol
) -> Result<()>
Convert an ApplicationError
into its wire representation and write
it to the remote.
Application code should never call this method directly.
Trait Implementations
impl From<String> for Error
[src]
impl<'a> From<&'a str> for Error
[src]
impl From<TransportError> for Error
[src]
fn from(e: TransportError) -> Self
[src]
impl From<ProtocolError> for Error
[src]
fn from(e: ProtocolError) -> Self
[src]
impl From<ApplicationError> for Error
[src]
fn from(e: ApplicationError) -> Self
[src]
impl From<Error> for Error
[src]
impl From<FromUtf8Error> for Error
[src]
fn from(err: FromUtf8Error) -> Self
[src]
impl Display for Error
[src]
impl Debug for Error
[src]
impl Error for Error
[src]
Auto Trait Implementations
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
impl !RefUnwindSafe for Error
Blanket Implementations
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> From<T> for T
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,