use super::runner::AirRunner;
use air_interpreter_interface::RunParameters;
use avm_interface::raw_outcome::RawAVMOutcome;
struct NativeAvmRunner {}
impl AirRunner for NativeAvmRunner {
fn call_tracing(
&mut self,
air: String,
prev_data: Vec<u8>,
data: Vec<u8>,
init_peer_id: String,
timestamp: u64,
ttl: u32,
current_peer_id: String,
call_results: avm_interface::CallResults,
_tracing_params: String,
_tracing_output_mode: u8,
) -> anyhow::Result<RawAVMOutcome> {
use avm_interface::into_raw_result;
let raw_call_results = into_raw_result(call_results);
let raw_call_results = serde_json::to_vec(&raw_call_results).unwrap();
let outcome = air::execute_air(
air,
prev_data,
data,
RunParameters {
init_peer_id,
current_peer_id,
timestamp,
ttl,
},
raw_call_results,
);
let outcome = RawAVMOutcome::from_interpreter_outcome(outcome)?;
Ok(outcome)
}
}
pub(crate) fn create_native_avm_runner() -> anyhow::Result<Box<dyn AirRunner>> {
Ok(Box::new(NativeAvmRunner {}))
}