26 lines
951 B
Rust
26 lines
951 B
Rust
use prometeu_abi::virtual_machine::{Value, VmFault};
|
|
|
|
pub fn expect_bounded(args: &[Value], idx: usize) -> Result<u32, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| match v {
|
|
Value::Bounded(b) => Some(*b),
|
|
_ => None,
|
|
})
|
|
.ok_or_else(|| VmFault::Trap(prometeu_bytecode::abi::TRAP_TYPE, format!("Expected bounded at index {}", idx)))
|
|
}
|
|
|
|
pub fn expect_int(args: &[Value], idx: usize) -> Result<i64, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| v.as_integer())
|
|
.ok_or_else(|| VmFault::Trap(prometeu_bytecode::abi::TRAP_TYPE, format!("Expected integer at index {}", idx)))
|
|
}
|
|
|
|
pub fn expect_bool(args: &[Value], idx: usize) -> Result<bool, VmFault> {
|
|
args.get(idx)
|
|
.and_then(|v| match v {
|
|
Value::Boolean(b) => Some(*b),
|
|
_ => None,
|
|
})
|
|
.ok_or_else(|| VmFault::Trap(prometeu_bytecode::abi::TRAP_TYPE, format!("Expected boolean at index {}", idx)))
|
|
}
|