#![doc = include_str!("../README.md")]
#![cfg_attr(not(any(feature = "testing", feature = "std")), no_std)]
#![deny(missing_docs)]
#![deny(rustdoc::broken_intra_doc_links)]
#[cfg(feature = "alloc")]
extern crate alloc;
pub mod input;
pub mod metadata;
pub mod path;
pub mod runtime;
pub use crate::metadata::METADATA_SIZE;
#[repr(i32)]
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum Error {
StoreKeyTooLarge = tezos_smart_rollup_core::STORE_KEY_TOO_LARGE,
StoreInvalidKey = tezos_smart_rollup_core::STORE_INVALID_KEY,
StoreNotAValue = tezos_smart_rollup_core::STORE_NOT_A_VALUE,
StoreInvalidAccess = tezos_smart_rollup_core::STORE_INVALID_ACCESS,
StoreValueSizeExceeded = tezos_smart_rollup_core::STORE_VALUE_SIZE_EXCEEDED,
MemoryInvalidAccess = tezos_smart_rollup_core::MEMORY_INVALID_ACCESS,
InputOutputTooLarge = tezos_smart_rollup_core::INPUT_OUTPUT_TOO_LARGE,
GenericInvalidAccess = tezos_smart_rollup_core::GENERIC_INVALID_ACCESS,
StoreReadonlyValue = tezos_smart_rollup_core::STORE_READONLY_VALUE,
StoreNotANode = tezos_smart_rollup_core::STORE_NOT_A_NODE,
FullOutbox = tezos_smart_rollup_core::FULL_OUTBOX,
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::StoreKeyTooLarge => write!(f, "StoreKeyTooLarge"),
Self::StoreInvalidKey => write!(f, "StoreInvalidKey"),
Self::StoreNotAValue => write!(f, "StoreNotAValue"),
Self::StoreInvalidAccess => write!(f, "StoreInvalidAccess"),
Self::StoreValueSizeExceeded => write!(f, "StoreValueSizeExceeded"),
Self::MemoryInvalidAccess => write!(f, "MemoryInvalidAccess"),
Self::InputOutputTooLarge => write!(f, "InputOutputTooLarge"),
Self::GenericInvalidAccess => write!(f, "GenericInvalidAccess"),
Self::StoreReadonlyValue => write!(f, "StoreReadonlyValue"),
Self::StoreNotANode => write!(f, "StoreNotANode"),
Self::FullOutbox => write!(f, "FullOutbox"),
}
}
}
impl From<i32> for Error {
fn from(code: i32) -> Self {
match code {
tezos_smart_rollup_core::STORE_KEY_TOO_LARGE => Self::StoreKeyTooLarge,
tezos_smart_rollup_core::STORE_INVALID_KEY => Self::StoreInvalidKey,
tezos_smart_rollup_core::STORE_NOT_A_VALUE => Self::StoreNotAValue,
tezos_smart_rollup_core::STORE_VALUE_SIZE_EXCEEDED => {
Self::StoreValueSizeExceeded
}
tezos_smart_rollup_core::STORE_INVALID_ACCESS => Self::StoreInvalidAccess,
tezos_smart_rollup_core::MEMORY_INVALID_ACCESS => Self::MemoryInvalidAccess,
tezos_smart_rollup_core::INPUT_OUTPUT_TOO_LARGE => Self::InputOutputTooLarge,
tezos_smart_rollup_core::GENERIC_INVALID_ACCESS => Self::GenericInvalidAccess,
tezos_smart_rollup_core::STORE_READONLY_VALUE => Self::StoreReadonlyValue,
tezos_smart_rollup_core::STORE_NOT_A_NODE => Self::StoreNotANode,
tezos_smart_rollup_core::FULL_OUTBOX => Self::FullOutbox,
_ => Error::GenericInvalidAccess,
}
}
}
impl From<i64> for Error {
fn from(code: i64) -> Self {
match i32::try_from(code) {
Ok(error) => error.into(),
Err(_) => Error::GenericInvalidAccess,
}
}
}
impl Error {
pub fn wrap(code: i32) -> Result<usize, Self> {
if code >= 0 {
Ok(code as usize)
} else {
Err(code.into())
}
}
pub fn code(self) -> i32 {
self as i32
}
}