pub struct Exception<'a> {
pub bits: ExceptionBits,
pub slot_presence: SlotPresence,
pub data: Cow<'a, str>,
}
Expand description
A type representing the wire format of Exception
. The data contained is
equivalently represented by DecodedException
.
This type is itself not used that much, most of its relevant methods live
on ExceptionULE
.
The bits
contain supplementary data, whereas
slot_presence
marks te presence of various extra data
in the data
field.
The data
field is not validated to contain all of this data,
this type will have GIGO behavior when constructed with invalid data
.
The format of data
is documented on the field
Fields§
§bits: ExceptionBits
The various bit based exception data associated with this.
Format: Just a u8 of bitflags, some flags unused. See ExceptionBits
and its ULE type for more.
slot_presence: SlotPresence
Which slots are present in data
.
Format: a u8 of bitflags
data: Cow<'a, str>
Format : [char slots] [optional closure length] [ closure slot ] [ full mappings data ]
For each set SlotPresence bit, except for the two stringy slots (Closure/FullMapping), this will have one entry in the string, packed together.
Note that the simple_case delta is stored as a u32 normalized to a char
, where u32s
which are from or beyond the surrogate range 0xD800-0xDFFF are stored as chars
starting from 0xE000. The sign is stored in bits.negative_delta.
If both Closure/FullMapping are present, the next char will be the length of the closure slot, bisecting the rest of the data. If only one is present, the rest of the data represents that slot.
The closure slot simply represents one string. The full-mappings slot represents four strings,
packed in a way similar to VarZeroVec, in the following format:
i1 i2 i3 [ str0 ] [ str1 ] [ str2 ] [ str3 ]
where i1 i2 i3
are the indices of the relevant mappings string. The strings are stored in
the order corresponding to the MappingKind enum.
Trait Implementations§
source§impl<'de, 'a> Deserialize<'de> for Exception<'a>
impl<'de, 'a> Deserialize<'de> for Exception<'a>
source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<Exception<'a>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<Exception<'a>, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
source§impl<'a> EncodeAsVarULE<ExceptionULE> for &Exception<'a>
impl<'a> EncodeAsVarULE<ExceptionULE> for &Exception<'a>
source§fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
cb
with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T
. Read moresource§fn encode_var_ule_len(&self) -> usize
fn encode_var_ule_len(&self) -> usize
VarULE
typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE
type to the dst
buffer. dst
should
be the size of Self::encode_var_ule_len()
source§impl<'a> EncodeAsVarULE<ExceptionULE> for Exception<'a>
impl<'a> EncodeAsVarULE<ExceptionULE> for Exception<'a>
source§fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
cb
with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T
. Read moresource§fn encode_var_ule_len(&self) -> usize
fn encode_var_ule_len(&self) -> usize
VarULE
typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE
type to the dst
buffer. dst
should
be the size of Self::encode_var_ule_len()
source§impl<'a> From<&'a ExceptionULE> for Exception<'a>
impl<'a> From<&'a ExceptionULE> for Exception<'a>
source§fn from(other: &'a ExceptionULE) -> Exception<'a>
fn from(other: &'a ExceptionULE) -> Exception<'a>
source§impl<'a> Serialize for Exception<'a>
impl<'a> Serialize for Exception<'a>
source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
source§impl<'a> ZeroFrom<'a, ExceptionULE> for Exception<'a>
impl<'a> ZeroFrom<'a, ExceptionULE> for Exception<'a>
source§fn zero_from(other: &'a ExceptionULE) -> Exception<'a>
fn zero_from(other: &'a ExceptionULE) -> Exception<'a>
C
into a struct that may retain references into C
.impl<'a> Eq for Exception<'a>
impl<'a> StructuralPartialEq for Exception<'a>
Auto Trait Implementations§
impl<'a> Freeze for Exception<'a>
impl<'a> RefUnwindSafe for Exception<'a>
impl<'a> Send for Exception<'a>
impl<'a> Sync for Exception<'a>
impl<'a> Unpin for Exception<'a>
impl<'a> UnwindSafe for Exception<'a>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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