Skip to main content

DecodeError

Enum DecodeError 

Source
pub enum DecodeError {
Show 34 variants UnexpectedEof, UnknownOpcode(u8), InvalidDefinitionId(u64), InvalidSequenceKind(u8), InvalidBinaryKind(u8), InvalidTowerOp(u8), InvalidCollectOp(u8), InvalidSeqVerbOp(u8), BadMagic([u8; 4]), UnsupportedVersion(u16), InvalidUtf8, InvalidValueType(u8), InvalidSelectKey(u8), InvalidLinePart(u8), InvalidLineContent(u8), InvalidPluralCategory(u8), InvalidSectionKind(u8), MissingSectionKind(u8), FileSizeMismatch { expected: u32, actual: usize, }, ChecksumMismatch { expected: u32, actual: u32, }, InvalidSectionOffset { kind: u8, offset: u32, }, BadInklMagic([u8; 4]), UnsupportedInklVersion(u8), MaxDepthExceeded(usize), UnsupportedSectionVersion { section: u8, version: u8, }, InvalidProjSegmentKind(u8), InvalidEffectCapParam(u8), InvalidEffectHandleParam(u8), InvalidEffectDimensions(u8), InvalidDebugLocalFlags(u8), ParamCountMismatch { declared: u8, actual: usize, }, DuplicateMapKey, InvalidConventionsProjectionTag(u8), InvalidFileSurface(u8),
}
Expand description

Errors that can occur when decoding from bytes.

Variants§

§

UnexpectedEof

Not enough bytes remaining for the expected operand.

§

UnknownOpcode(u8)

Unknown opcode discriminant byte.

§

InvalidDefinitionId(u64)

Invalid definition id (bad tag byte).

§

InvalidSequenceKind(u8)

Invalid sequence kind byte.

§

InvalidBinaryKind(u8)

Invalid binary-operator kind byte on a fused superinstruction.

§

InvalidTowerOp(u8)

Invalid tower op kind byte (NS-A8 Tower opcode immediate).

§

InvalidCollectOp(u8)

Invalid collections+ op kind byte (NS-A7 Collect opcode immediate).

§

InvalidSeqVerbOp(u8)

Invalid fn-value verb kind byte (SeqVerb opcode immediate, issue #1679).

§

BadMagic([u8; 4])

.inkb magic bytes are not INKB.

§

UnsupportedVersion(u16)

.inkb version is not supported.

§

InvalidUtf8

A string field contained invalid UTF-8.

§

InvalidValueType(u8)

Unknown value type discriminant.

§

InvalidSelectKey(u8)

Unknown select key discriminant.

§

InvalidLinePart(u8)

Unknown line part discriminant.

§

InvalidLineContent(u8)

Unknown line content discriminant.

§

InvalidPluralCategory(u8)

Unknown plural category discriminant.

§

InvalidSectionKind(u8)

Unknown section kind tag in .inkb offset table.

§

MissingSectionKind(u8)

Required section kind missing from .inkb offset table.

§

FileSizeMismatch

File size field doesn’t match actual buffer length.

Fields

§expected: u32
§actual: usize
§

ChecksumMismatch

CRC-32 checksum of section data doesn’t match header.

Fields

§expected: u32
§actual: u32
§

InvalidSectionOffset

Section offset table is structurally invalid (out of bounds or not monotonic).

Fields

§kind: u8
§offset: u32
§

BadInklMagic([u8; 4])

.inkl magic bytes are not INKL.

§

UnsupportedInklVersion(u8)

.inkl version is not supported.

§

MaxDepthExceeded(usize)

VAL_ARRAY/VAL_MAP nesting exceeded the decoder’s recursion-depth cap (see MAX_DECODE_DEPTH). Guards against crafted files of deeply nested single-element collections stack-overflowing the reader.

§

UnsupportedSectionVersion

A section-locally-versioned section (e.g. AliasTable, docs/modules-spec.md §5) carried a version byte this reader doesn’t know how to decode.

Fields

§section: u8
§version: u8
§

InvalidProjSegmentKind(u8)

A VAL_PROJECTION segment carried an unknown kind byte — either malformed bytecode or the RESERVED range-segment kind (2, docs/format-v4-rfc.md §1), which nothing emits in T1e and the reader therefore rejects (docs/t1e-spec.md §3).

§

InvalidEffectCapParam(u8)

An EffectRows call atom carried an unknown capability-parameter tag (T2-3, docs/effects-spec.md §11). Only Any (0) is legal in this section version; path-granular tags are reserved (#826).

§

InvalidEffectHandleParam(u8)

An EffectRows call atom carried a non-None handle-parameter slot (T2-3, docs/effects-spec.md §11, docs/t1d-spec.md §7). The slot is reserved — nothing emits a bound handle in this section version.

§

InvalidEffectDimensions(u8)

A DirectEffects extension-flags byte (NS-A2, EffectRows section version 3) carried a set bit outside the known emits/tags/faults mask — the reserved bits (3–7) are rejected until a section version graduates them.

§

InvalidDebugLocalFlags(u8)

A DebugLocalEntry row’s flags byte (DebugInfo section version 2, #3395) carried a set bit outside the known has-range/synthetic mask — the reserved bits (2–7) are rejected until a section version graduates them, same discipline as InvalidEffectDimensions.

§

ParamCountMismatch

A ContainerDef’s declared param_count disagreed with the number of per-param name/mode metadata entries that followed it (#954, sibling of the .inkt reader’s same guard, #745). ContainerDef’s documented invariant is that params.len() always equals param_count whenever per-param metadata is present at all (empty params is the separate, legitimate “count only, no metadata” case). A mutated/corrupt .inkb asserting otherwise is malformed input.

Fields

§declared: u8
§actual: usize
§

DuplicateMapKey

A VAL_MAP entry list carried the same key twice. A legitimate encoder never emits this — OrderedMap::insert de-duplicates on the write side — so a repeated key is a corrupt or crafted .inkb; the content-based OrderedMap Eq (issue #909) assumes each key appears once, so this is rejected rather than silently keeping the last occurrence (issue #985).

§

InvalidConventionsProjectionTag(u8)

An unknown discriminant tag in the conventions-projection wire codec (issue #2111 finding 2, crate::conventions) — a mode byte, attach-presence/resolution byte, or SchemaTypeDef tag outside the known range. One shared variant for all three: each is “an unknown byte in this one codec’s own tag space”, the same causal category, so this mirrors InvalidSectionKind’s single-variant-per-codec posture rather than minting three near-duplicate variants.

§

InvalidFileSurface(u8)

A DebugInfo (0x11, docs/debugger-spec.md §2.3) file-table entry carried an unknown surface byte (only 0 Synthetic / 1 Ink / 2 Native are defined). Unlike the section’s own flags reserved-bit tolerance (§2.2 — unknown bits are ignored, never rejected), an unknown surface tag is a structurally different file table this reader cannot interpret at all (it decides which ProvenanceResolver even applies), so it is rejected rather than silently mis-surfaced.

Trait Implementations§

Source§

impl Clone for DecodeError

Source§

fn clone(&self) -> DecodeError

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DecodeError

Source§

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

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

impl Display for DecodeError

Source§

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

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

impl Eq for DecodeError

Source§

impl Error for DecodeError

1.30.0 · 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 PartialEq for DecodeError

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for DecodeError

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.