Struct abi_stable::std_types::RBoxError_[][src]

#[repr(C)]
pub struct RBoxError_<M = SyncSend> { /* fields omitted */ }
Expand description

Ffi-safe version of Box<dyn std::error::Error + 'static> whose Send + Syncness is determined by the M type parameter.

Examples

Converting from and into Box<dyn Error + ...>

use std::{convert::TryFrom, error::Error as ErrorTrait};

use abi_stable::std_types::{RBox, RBoxError, SendRBoxError, UnsyncRBoxError};

{
    let from: Box<dyn ErrorTrait> = "hello, error".into();
    let rbox = UnsyncRBoxError::from_box(from);
    let _: Box<dyn ErrorTrait> = rbox.into_box();
}

{
    let arr_err = <[(); 0]>::try_from(&[()][..]).unwrap_err();
    let from: Box<dyn ErrorTrait + Send> = Box::new(arr_err);
    let rbox = SendRBoxError::from_box(from);
    let _: Box<dyn ErrorTrait + Send> = rbox.into_box();
}

{
    let arr_err = <[(); 0]>::try_from(&[()][..]).unwrap_err();
    let from: Box<dyn ErrorTrait + Send + Sync> = Box::new(arr_err);
    let rbox = RBoxError::from_box(from);
    let _: Box<dyn ErrorTrait + Send + Sync> = rbox.into_box();
}

Downcasting by value

use std::num::{ParseFloatError, ParseIntError};

use abi_stable::std_types::{RBox, RBoxError};

// Constructing a `RBoxError` from a `Box<dyn Error>`, then downcasting to a `ParseIntError`.
{
    let parse_err = "".parse::<u64>().unwrap_err();
    let dyn_err: Box<std::error::Error + Send + Sync + 'static> =
        Box::new(parse_err.clone());
    let err = RBoxError::from_box(dyn_err);

    assert_eq!(
        err.downcast::<ParseIntError>().unwrap(),
        RBox::new(parse_err)
    );
}

// Constructing a `RBoxError` from a `ParseFloatError`, then downcasting back to it.
{
    let parse_err = "".parse::<f32>().unwrap_err();
    let err = RBoxError::new(parse_err.clone());

    assert_eq!(
        err.downcast::<ParseFloatError>().unwrap(),
        RBox::new(parse_err)
    );
}

// Constructing a `RBoxError` from a `ParseFloatError`,
// then attempting to downcasting it to a `ParseIntError`.
{
    let parse_err = "".parse::<f32>().unwrap_err();
    let err = RBoxError::new(parse_err);

    assert!(err.downcast::<ParseIntError>().is_err());
}

Downcasting by reference

use std::{convert::TryFrom, num::TryFromIntError, str::Utf8Error};

use abi_stable::std_types::{RBox, UnsyncRBoxError};

// Constructing a `UnsyncRBoxError` from a `Box<dyn Error>`,
// then downcasting to a `TryFromIntError`.
{
    let int_err = u32::try_from(-1_i32).unwrap_err();
    let dyn_err: Box<std::error::Error + 'static> = Box::new(int_err.clone());
    let err = UnsyncRBoxError::from_box(dyn_err);

    assert_eq!(err.downcast_ref::<TryFromIntError>().unwrap(), &int_err);
}

// Constructing a `UnsyncRBoxError` from a `Utf8Error`, then downcasting back to it.
{
    let utf8_err = std::str::from_utf8(&[255]).unwrap_err();
    let err = UnsyncRBoxError::new(utf8_err.clone());

    assert_eq!(err.downcast_ref::<Utf8Error>().unwrap(), &utf8_err);
}

// Constructing a `UnsyncRBoxError` from a `Utf8Error`,
// then attempting to downcasting it to a `TryFromIntError`.
{
    let utf8_err = std::str::from_utf8(&[255]).unwrap_err();
    let err = UnsyncRBoxError::new(utf8_err);

    assert!(err.downcast_ref::<TryFromIntError>().is_none());
}

Downcasting by mutable reference

use std::string::{FromUtf16Error, FromUtf8Error};

use abi_stable::std_types::{RBox, SendRBoxError};

// Constructing a `SendRBoxError` from a `Box<dyn Error>`,
// then downcasting to a `FromUtf8Error`.
{
    let str_err = || String::from_utf8(vec![255]).unwrap_err();
    let dyn_err: Box<std::error::Error + Send + 'static> = Box::new(str_err());
    let mut err = SendRBoxError::from_box(dyn_err);

    assert!(err.downcast_ref::<FromUtf8Error>().is_some(), "part A");
}

// Constructing a `SendRBoxError` from a `FromUtf8Error`, then downcasting back to it.
{
    let str_err = || String::from_utf8(vec![255]).unwrap_err();
    let mut err = SendRBoxError::new(str_err());

    assert!(err.downcast_ref::<FromUtf8Error>().is_some(), "part B");
}

// Constructing a `SendRBoxError` from a `FromUtf16Error`,
// then attempting to downcasting it to a `FromUtf8Error`.
{
    let str_err = || String::from_utf16(&[0xD834]).unwrap_err();
    let mut err = SendRBoxError::new(str_err());

    assert!(err.downcast_ref::<FromUtf8Error>().is_none(), "part C");
}

Implementations

Constructs a Send + Sync RBoxError_ from an error.

Example
use abi_stable::std_types::RBoxError;

let str_err = String::from_utf8(vec![255]).unwrap_err();

let err = RBoxError::new(str_err);

Constructs a Send + !Sync RBoxError_ from an error.

Example
use abi_stable::std_types::SendRBoxError;

let str_err = String::from_utf16(&[0xD834]).unwrap_err() ;

let err = SendRBoxError::new(str_err);

Constructs a !Send + !Sync RBoxError_ from an error.

Example
use abi_stable::std_types::UnsyncRBoxError;

let str_err = std::str::from_utf8(&[255]).unwrap_err() ;

let err = UnsyncRBoxError::new(str_err);

Constructs an RBoxError from an error, storing the Debug and Display messages without storing the error value.

Example
use abi_stable::std_types::RBoxError;

let int_error = "".parse::<u32>().unwrap_err();

let display_fmt = int_error.to_string();
let debug_fmt = format!("{:#?}", int_error);

let err = RBoxError::from_fmt(&int_error);

assert_eq!(display_fmt, err.to_string());
assert_eq!(debug_fmt, format!("{:?}", err));

Constructs an RBoxError from a type that only implements Debug, storing the Debug message without storing the error value.

Example
use abi_stable::std_types::RBoxError;

let int_error = "".parse::<u32>().unwrap_err();

let debug_fmt = format!("{:#?}", int_error);
let err = RBoxError::from_debug(&int_error);

assert_eq!(debug_fmt, format!("{}", err));
assert_eq!(debug_fmt, format!("{:#?}", err));

Converts this error to a formatted error

This is used to decouple an RBoxError from the dynamic library that produced it, in order to unload the dynamic library.

Returns the UTypeId of the error this wraps.

The address of the Box<_> this wraps

Casts this &RBoxError_<_> to &UnsyncRBoxError.

Example
use abi_stable::std_types::{RBoxError, UnsyncRBoxError};
use std::convert::TryFrom;

let int_err = u32::try_from(-1_i32).unwrap_err();

let err: RBoxError = RBoxError::new(int_err);

let unsync_err: &UnsyncRBoxError = err.as_unsync();

Converts this RBoxError_<_> to UnsyncRBoxError.

Example
use abi_stable::std_types::{RBoxError, UnsyncRBoxError};
use std::convert::TryFrom;

let int_err = u64::try_from(-1338_i32).unwrap_err();

let err: RBoxError = RBoxError::new(int_err);

let unsync_err: UnsyncRBoxError = err.into_unsync();

Casts this &RBoxError_<_> to &SendRBoxError.

Example
use abi_stable::std_types::{RBoxError, SendRBoxError};
use std::convert::TryFrom;

let slice: &mut [u32] = &mut [];
let arr_err=<&mut [u32;10]>::try_from(slice).unwrap_err();

let err: RBoxError = RBoxError::new(arr_err);

let unsync_err: &SendRBoxError = err.as_send();

Converts this RBoxError_<_> to SendRBoxError.

Example
use abi_stable::std_types::{RBoxError, SendRBoxError};
use std::convert::TryFrom;

let slice: &[u32] = &[];
let arr_err=<&[u32;10]>::try_from(slice).unwrap_err();

let err: RBoxError = RBoxError::new(arr_err);

let unsync_err: SendRBoxError = err.into_send();

Converts a Box<dyn Error + Send + Sync> to a Send + Sync RBoxError_.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts an RBoxError_<_> to a Box<dyn Error>.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the RBoxError_<_> is an erased Box<dyn Error + ... > it will be returned directly, otherwise the RBoxError_<_> will be converted into an Box<dyn Error + ... > using Box::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts this RBoxError_<_> to an RBox<T>.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to Box<dyn Error + ... >, then it’ll downcast the Box<dyn Error + ... > into RBox<T>.

Errors

This returns Err(self) in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example.

Converts this &RBoxError_<_> to a &T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &dyn Error + ... , then it’ll downcast the &dyn Error + ... into &T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Converts this &mut RBoxError_<_> to a &mut T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &mut dyn Error + ... , then it’ll downcast the &mut dyn Error + ... into &mut T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Converts a Box<dyn Error + Send> to a Send + !Sync RBoxError_.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts an RBoxError_<_> to a Box<dyn Error>.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the RBoxError_<_> is an erased Box<dyn Error + ... > it will be returned directly, otherwise the RBoxError_<_> will be converted into an Box<dyn Error + ... > using Box::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts this RBoxError_<_> to an RBox<T>.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to Box<dyn Error + ... >, then it’ll downcast the Box<dyn Error + ... > into RBox<T>.

Errors

This returns Err(self) in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example.

Converts this &RBoxError_<_> to a &T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &dyn Error + ... , then it’ll downcast the &dyn Error + ... into &T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Converts this &mut RBoxError_<_> to a &mut T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &mut dyn Error + ... , then it’ll downcast the &mut dyn Error + ... into &mut T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Converts a Box<dyn Error> to a !Send + !Sync RBoxError_.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts an RBoxError_<_> to a Box<dyn Error>.

RBoxError::from_box( RBoxError::into_box( err ) ) is a no-op with respect to the heap address of the RBoxError_<_>.

Behavior

If the contents of the RBoxError_<_> is an erased Box<dyn Error + ... > it will be returned directly, otherwise the RBoxError_<_> will be converted into an Box<dyn Error + ... > using Box::new.

Example

For an example of converting back and forth to a Box<dyn Error> here is the example.

Converts this RBoxError_<_> to an RBox<T>.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to Box<dyn Error + ... >, then it’ll downcast the Box<dyn Error + ... > into RBox<T>.

Errors

This returns Err(self) in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example.

Converts this &RBoxError_<_> to a &T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &dyn Error + ... , then it’ll downcast the &dyn Error + ... into &T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Converts this &mut RBoxError_<_> to a &mut T.

If was constructed from a Box<dyn Error + ... >, and this is being casted to another type, it’ll first downcast to &mut dyn Error + ... , then it’ll downcast the &mut dyn Error + ... into &mut T.

Errors

This returns None in any of these cases:

  • The RBoxError_ wasn’t constructed in the current dynamic library.

  • The RBoxError_ was constructed with a different type than T.

Example

Look at the type level documentation for the example. the example.

Trait Implementations

Formats the value using the given formatter. Read more

Formats the value using the given formatter. Read more

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Converts a Box<dyn Error> to a !Send + !Sync RBoxError_.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Converts a Box<dyn Error + Send> to a Send + !Sync RBoxError_.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Converts a Box<dyn Error + Send + Sync> to a Send + Sync RBoxError_.

Behavior

If the contents of the Box<_> is an erased RBoxError_<_> it will be returned directly, otherwise the Box<_> will be converted into an RBoxError_<_> using RBoxError_::new.

Whether this type has a single invalid bit-pattern. Read more

The layout of the type provided by implementors.

const-equivalents of the associated types.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

This is always WithMetadata_<Self, Self>

Performs the conversion.

Gets a reference to a field, determined by offset. Read more

Gets a muatble reference to a field, determined by offset. Read more

Gets a const pointer to a field, the field is determined by offset. Read more

Gets a mutable pointer to a field, determined by offset. Read more

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more

Swaps a field (determined by offset) with the same field in right. Read more

Gets a copy of a field (determined by offset). The field is determined by offset. Read more

Replaces a field (determined by offset) with value, returning the previous value of the field. Read more

Swaps a field (determined by offset) with the same field in right. Read more

Gets a copy of a field (determined by offset). The field is determined by offset. Read more

Compares the address of self with the address of other. Read more

Emulates the pipeline operator, allowing method syntax in more places. Read more

The same as piped except that the function takes &Self Useful for functions that take &Self instead of Self. Read more

The same as piped, except that the function takes &mut Self. Useful for functions that take &mut Self instead of Self. Read more

Mutates self using a closure taking self by mutable reference, passing it along the method chain. Read more

Observes the value of self, passing it along unmodified. Useful in long method chains. Read more

Performs a conversion with Into. using the turbofish .into_::<_>() syntax. Read more

Performs a reference to reference conversion with AsRef, using the turbofish .as_ref_::<_>() syntax. Read more

Performs a mutable reference to mutable reference conversion with AsMut, using the turbofish .as_mut_::<_>() syntax. Read more

Drops self using method notation. Alternative to std::mem::drop. Read more

Converts the given value to a String. Read more

Transmutes the element type of this pointer.. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

This is always Self.

Converts a value back to the original type.

Converts a reference back to the original type.

Converts a mutable reference back to the original type.

This is supported on crate feature alloc only.

Converts a box back to the original type.

This is supported on crate feature alloc only.

Converts an Arc back to the original type. Read more

This is supported on crate feature alloc only.

Converts an Rc back to the original type. Read more

Converts a value back to the original type.

Converts a reference back to the original type.

Converts a mutable reference back to the original type.

This is supported on crate feature alloc only.

Converts a box back to the original type.

This is supported on crate feature alloc only.

Converts an Arc back to the original type.

This is supported on crate feature alloc only.

Converts an Rc back to the original type.