Skip to main content

LibraryExn

Enum LibraryExn 

Source
#[non_exhaustive]
#[repr(i32)]
pub enum LibraryExn {
Show 14 variants Syscall(SyscallExn), Handling(HandlingError), Calling(CallingError), Called(FaultString), AuthToken(AuthTokenError), BytestringWrongSize { expected: u32, found: u32, }, NonNegativeIntUnderflow = 6, NonNegativeIntOverflow = 7, StorageSerialization = 8, StorageIndexOutOfBounds { len: u64, access: u64, }, StorageKeypathOverflow = 10, RetrocausalQueueEntryWrongSize { expected: u32, found: u32, }, CapacityConstraintAlreadyWritten = 12, UnknownMethod = 13,
}
Expand description

An exception generated by SDK internals.

The wire layout is fixed regardless of crate features – discriminants and payloads alike. Both halves of that have been broken before: discriminant 8 was once a feature-gated Storage(StorageError) nested enum (now the flat StorageSerialization, with the other storage conditions at 9 and 10), and the variants carrying a FaultString once encoded its message under debugging, so an abort payload differed between a host test and the shipped artifact. FaultString now keeps its message host-side and encodes to nothing. Keep new variants payload-stable the same way.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Syscall(SyscallExn)

§

Handling(HandlingError)

§

Calling(CallingError)

§

Called(FaultString)

§

AuthToken(AuthTokenError)

§

BytestringWrongSize

Fields

§expected: u32
§found: u32
§

NonNegativeIntUnderflow = 6

§

NonNegativeIntOverflow = 7

§

StorageSerialization = 8

§

StorageIndexOutOfBounds

Fields

§len: u64
§access: u64
§

StorageKeypathOverflow = 10

§

RetrocausalQueueEntryWrongSize

Fields

§expected: u32
§found: u32
§

CapacityConstraintAlreadyWritten = 12

§

UnknownMethod = 13

The invoked method id matched no entrypoint on this contract.

Thrown by guest dispatch (and by the native mock, for a contract registered through register_mock_package) in place of the bare trap it used to answer with, which a caller could not tell apart from an OOB access or a bad instruction. Carries no method id — the caller picked the id it invoked.

Implementations§

Source§

impl LibraryExn

Source

pub fn as_syscall_exn(&self) -> Option<&SyscallExn>

Source

pub fn is_storage_missing(&self) -> bool

True if this is a syscall error saying nothing is stored where a storage read looked: a missing key (kSyscallErrorCodeStorageKeyNotExist) or an empty retro-causal queue (kSyscallErrorCodeNoRetrocausalQueueEntry).

This is the “graceful” arm of the storage try_ getters: a try_get / try_consume Err for which this returns false means the read failed for a reason other than absence (wrong storage type at the key, a corrupt encoding, a host fault).

Trait Implementations§

Source§

impl ConstMaxSize for LibraryExn

Source§

const MAX_SIZE: Option<usize>

Worst-case CXS encoded size in bytes, or None if unbounded.
Source§

impl ConstMaxSize for LibraryExn

Source§

const MAX_SIZE: Option<usize>

Worst-case TXS encoded size in bytes, or None if unbounded.
Source§

impl ContractTypeName for LibraryExn

Source§

const NAME: ContractSpecIdView<'static>

The fully qualified id this type is known by in the contract spec. Read more
Source§

impl ContractTypeRefSpec for LibraryExn

Source§

const INFO: ContractTypeInfo<'static>

The type reference. Transitive type definitions are not carried here; they are retained via the linker-anchor mechanism (__THRUPUT_SPEC_ANCHOR_ROOT) and resolved by spec-tool.
Source§

const SIGNED_PREIMAGE: Option<&'static ContractTypeView<'static>> = _

How this type appears as a signed-token preimage (ContractTypeView::SignedToken’s payload): the type itself by default, or None for a type-erased payload (the SDK’s Opaque overrides this).
Source§

impl ContractTypeSpec for LibraryExn

Source§

const TYPE_DEF: ContractTypeDefView<'static>

The type’s definition (struct, enum, or union) as a const view.
Source§

impl Debug for LibraryExn

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for LibraryExn

Source§

fn fmt(&self, __formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl EncodesAs<LibraryExn> for LibraryExn

Source§

impl Error for LibraryExn

Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Exn for LibraryExn

Source§

const SELECTOR: u64 = 16529008398361299651u64

Source§

impl From<AuthTokenError> for LibraryExn

Source§

fn from(e: AuthTokenError) -> Self

Converts to this type from the input type.
Source§

impl From<CallingError> for LibraryExn

Source§

fn from(e: CallingError) -> Self

Converts to this type from the input type.
Source§

impl From<HandlingError> for LibraryExn

Source§

fn from(e: HandlingError) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for LibraryExn

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl ReThrow for LibraryExn

Result<T, LibraryExn>::or_re_throw() aborts with the contained library exception (typed, decodable by selector) rather than a fault.

Source§

fn re_throw(self) -> !

Re-throw this error. Exceptions are propagated as exceptions; faults panic (a fault stays a fault).
Source§

impl<'_r> ReadXDR<'_r> for LibraryExn

Source§

fn read_xdr<R: Reader<'_r>>(r: &mut R) -> ReadResult<Self>

Reads an XDR value from the reader. Read more
Source§

fn read_xdr_in_place<'s, R>( r: &mut R, slot: Slot<'s, Self>, ) -> Result<Init<'s, Self>, ReadError>
where R: Reader<'r>,

Reads an XDR value directly into slot, without first building it on the stack. Read more
Source§

impl StructuralPartialEq for LibraryExn

Source§

impl WriteXDR for LibraryExn

Source§

fn write_xdr<F, W: Writer<F>>( &self, __write_xdr_writer: &mut W, ) -> WriteResult<()>

Writes this value as XDR data to the writer. Read more
Source§

unsafe fn write_xdr_unchecked<F, W: WriterUnchecked<F>>( &self, __write_xdr_writer: &mut W, )

Writes this value as XDR data to the writer, without runtime checks. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Context for T
where T: Any + Display,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Hash for T
where T: WriteXDR,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ReadXDROwned for T
where T: for<'r> ReadXDR<'r>,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> StaticIfNoAlloc for T

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.