1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
use super::TableType;
use crate::core::ValType;
use core::{fmt, fmt::Display};
/// Errors that may occur upon operating with table entities.
#[derive(Debug)]
#[non_exhaustive]
pub enum TableError {
/// Occurs when growing a table out of its set bounds.
GrowOutOfBounds {
/// The maximum allowed table size.
maximum: u32,
/// The current table size before the growth operation.
current: u32,
/// The amount of requested invalid growth.
delta: u32,
},
/// Occurs when operating with a [`Table`](crate::Table) and mismatching element types.
ElementTypeMismatch {
/// Expected element type for the [`Table`](crate::Table).
expected: ValType,
/// Encountered element type.
actual: ValType,
},
/// Occurs when accessing the table out of bounds.
AccessOutOfBounds {
/// The current size of the table.
current: u32,
/// The accessed index that is out of bounds.
offset: u32,
},
/// Occur when coping elements of tables out of bounds.
CopyOutOfBounds,
/// Occurs when `ty` is not a subtype of `other`.
InvalidSubtype {
/// The [`TableType`] which is not a subtype of `other`.
ty: TableType,
/// The [`TableType`] which is supposed to be a supertype of `ty`.
other: TableType,
},
TooManyTables,
}
#[cfg(feature = "std")]
impl std::error::Error for TableError {}
impl Display for TableError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::GrowOutOfBounds {
maximum,
current,
delta,
} => {
write!(
f,
"tried to grow table with size of {current} and maximum of \
{maximum} by {delta} out of bounds",
)
}
Self::ElementTypeMismatch { expected, actual } => {
write!(f, "encountered mismatching table element type, expected {expected:?} but found {actual:?}")
}
Self::AccessOutOfBounds { current, offset } => {
write!(
f,
"out of bounds access of table element {offset} \
of table with size {current}",
)
}
Self::CopyOutOfBounds => {
write!(f, "out of bounds access of table elements while copying")
}
Self::InvalidSubtype { ty, other } => {
write!(f, "table type {ty:?} is not a subtype of {other:?}",)
}
Self::TooManyTables => {
write!(f, "too many tables")
}
}
}
}