midnight_onchain_vm/
state_value_ext.rs1use storage::{arena::Sp, db::DB};
15
16use crate::error::OnchainProgramError;
17use base_crypto::fab::AlignedValue;
18use runtime_state::state::StateValue;
19
20pub trait StateValueExt<D: DB> {
21 fn as_cell(&self) -> Result<Sp<AlignedValue, D>, OnchainProgramError<D>>;
22 fn as_cell_ref(&self) -> Result<&AlignedValue, OnchainProgramError<D>>;
23}
24
25impl<D: DB> StateValueExt<D> for StateValue<D> {
26 fn as_cell(&self) -> Result<Sp<AlignedValue, D>, OnchainProgramError<D>> {
27 match self {
28 StateValue::Cell(value) => Ok(value.clone()),
29 _ => Err(OnchainProgramError::ExpectedCell(self.clone())),
30 }
31 }
32
33 fn as_cell_ref(&self) -> Result<&AlignedValue, OnchainProgramError<D>> {
34 match self {
35 StateValue::Cell(value) => Ok(value),
36 _ => Err(OnchainProgramError::ExpectedCell(self.clone())),
37 }
38 }
39}