#[cfg(all(not(target_arch = "wasm32"), feature = "unit-testing"))]
pub use near_vm_runner::logic::types::{PromiseResult as VmPromiseResult, ReturnData};
#[derive(Debug, Eq, PartialEq, PartialOrd, Ord, Hash, Copy, Clone)]
pub struct PromiseIndex(pub(crate) u64);
#[deprecated(since = "4.1.0", note = "type not used within SDK, use u64 directly or another alias")]
pub type ReceiptIndex = u64;
#[deprecated(since = "4.1.0", note = "type not used within SDK, use u64 directly or another alias")]
pub type IteratorIndex = u64;
#[derive(Debug, PartialEq, Eq)]
pub enum PromiseResult {
Successful(Vec<u8>),
Failed,
}
#[cfg(all(not(target_arch = "wasm32"), feature = "unit-testing"))]
impl From<PromiseResult> for VmPromiseResult {
fn from(p: PromiseResult) -> Self {
match p {
PromiseResult::Successful(v) => Self::Successful(v.into_boxed_slice().into()),
PromiseResult::Failed => Self::Failed,
}
}
}
#[non_exhaustive]
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum PromiseError {
Failed,
TooLong(
usize,
),
}
impl std::fmt::Display for PromiseError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
PromiseError::Failed => write!(f, "promise result failed"),
PromiseError::TooLong(len) => {
write!(f, "promise result too long: {len} bytes")
}
}
}
}
impl std::error::Error for PromiseError {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_promise_error_display_failed() {
let err = PromiseError::Failed;
assert_eq!(err.to_string(), "promise result failed");
}
#[test]
fn test_promise_error_display_too_long() {
let err = PromiseError::TooLong(1024);
assert_eq!(err.to_string(), "promise result too long: 1024 bytes");
}
#[test]
fn test_promise_error_implements_std_error() {
let err = PromiseError::Failed;
let _: &dyn std::error::Error = &err;
}
#[test]
fn test_promise_error_clone() {
let err = PromiseError::TooLong(512);
let cloned = err.clone();
assert_eq!(err, cloned);
}
#[test]
fn test_promise_error_debug() {
let err = PromiseError::Failed;
assert_eq!(format!("{:?}", err), "Failed");
let err = PromiseError::TooLong(256);
assert_eq!(format!("{:?}", err), "TooLong(256)");
}
}