tezos_smart_rollup_host/
lib.rs1#![doc = include_str!("../README.md")]
9#![cfg_attr(not(any(feature = "testing", feature = "std")), no_std)]
10#![deny(missing_docs)]
11#![deny(rustdoc::broken_intra_doc_links)]
12
13#[cfg(feature = "alloc")]
14extern crate alloc;
15
16pub mod dal_parameters;
17pub mod input;
18pub mod metadata;
19pub mod path;
20pub mod runtime;
21
22pub use crate::dal_parameters::DAL_PARAMETERS_SIZE;
24pub use crate::metadata::METADATA_SIZE;
26use path::RefPath;
27
28pub const KERNEL_BOOT_PATH: RefPath = RefPath::assert_from(b"/kernel/boot.wasm");
30
31#[repr(i32)]
33#[derive(Debug, Copy, Clone, Eq, PartialEq)]
34pub enum Error {
35 StoreKeyTooLarge = tezos_smart_rollup_core::STORE_KEY_TOO_LARGE,
38 StoreInvalidKey = tezos_smart_rollup_core::STORE_INVALID_KEY,
41 StoreNotAValue = tezos_smart_rollup_core::STORE_NOT_A_VALUE,
44 StoreInvalidAccess = tezos_smart_rollup_core::STORE_INVALID_ACCESS,
47 StoreValueSizeExceeded = tezos_smart_rollup_core::STORE_VALUE_SIZE_EXCEEDED,
49 MemoryInvalidAccess = tezos_smart_rollup_core::MEMORY_INVALID_ACCESS,
51 InputOutputTooLarge = tezos_smart_rollup_core::INPUT_OUTPUT_TOO_LARGE,
54 GenericInvalidAccess = tezos_smart_rollup_core::GENERIC_INVALID_ACCESS,
56 StoreReadonlyValue = tezos_smart_rollup_core::STORE_READONLY_VALUE,
58 StoreNotANode = tezos_smart_rollup_core::STORE_NOT_A_NODE,
60 FullOutbox = tezos_smart_rollup_core::FULL_OUTBOX,
62}
63
64impl core::fmt::Display for Error {
65 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
66 match self {
67 Self::StoreKeyTooLarge => write!(f, "StoreKeyTooLarge"),
68 Self::StoreInvalidKey => write!(f, "StoreInvalidKey"),
69 Self::StoreNotAValue => write!(f, "StoreNotAValue"),
70 Self::StoreInvalidAccess => write!(f, "StoreInvalidAccess"),
71 Self::StoreValueSizeExceeded => write!(f, "StoreValueSizeExceeded"),
72 Self::MemoryInvalidAccess => write!(f, "MemoryInvalidAccess"),
73 Self::InputOutputTooLarge => write!(f, "InputOutputTooLarge"),
74 Self::GenericInvalidAccess => write!(f, "GenericInvalidAccess"),
75 Self::StoreReadonlyValue => write!(f, "StoreReadonlyValue"),
76 Self::StoreNotANode => write!(f, "StoreNotANode"),
77 Self::FullOutbox => write!(f, "FullOutbox"),
78 }
79 }
80}
81
82impl From<i32> for Error {
83 fn from(code: i32) -> Self {
84 match code {
85 tezos_smart_rollup_core::STORE_KEY_TOO_LARGE => Self::StoreKeyTooLarge,
86 tezos_smart_rollup_core::STORE_INVALID_KEY => Self::StoreInvalidKey,
87 tezos_smart_rollup_core::STORE_NOT_A_VALUE => Self::StoreNotAValue,
88 tezos_smart_rollup_core::STORE_VALUE_SIZE_EXCEEDED => {
89 Self::StoreValueSizeExceeded
90 }
91 tezos_smart_rollup_core::STORE_INVALID_ACCESS => Self::StoreInvalidAccess,
92 tezos_smart_rollup_core::MEMORY_INVALID_ACCESS => Self::MemoryInvalidAccess,
93 tezos_smart_rollup_core::INPUT_OUTPUT_TOO_LARGE => Self::InputOutputTooLarge,
94 tezos_smart_rollup_core::GENERIC_INVALID_ACCESS => Self::GenericInvalidAccess,
95 tezos_smart_rollup_core::STORE_READONLY_VALUE => Self::StoreReadonlyValue,
96 tezos_smart_rollup_core::STORE_NOT_A_NODE => Self::StoreNotANode,
97 tezos_smart_rollup_core::FULL_OUTBOX => Self::FullOutbox,
98 _ => Error::GenericInvalidAccess,
99 }
100 }
101}
102
103impl From<i64> for Error {
104 fn from(code: i64) -> Self {
105 match i32::try_from(code) {
106 Ok(error) => error.into(),
107 Err(_) => Error::GenericInvalidAccess,
108 }
109 }
110}
111
112impl Error {
113 pub fn wrap(code: i32) -> Result<usize, Self> {
115 if code >= 0 {
116 Ok(code as usize)
118 } else {
119 Err(code.into())
120 }
121 }
122
123 pub fn code(self) -> i32 {
125 self as i32
126 }
127}