use crate::{Gas, InstructionResult, InterpreterResult};
use core::ops::Range;
use primitives::{Bytes, Log};
use std::vec::Vec;
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CallOutcome {
pub result: InterpreterResult,
pub memory_offset: Range<usize>,
pub was_precompile_called: bool,
pub precompile_call_logs: Vec<Log>,
}
impl CallOutcome {
pub fn new(result: InterpreterResult, memory_offset: Range<usize>) -> Self {
Self {
result,
memory_offset,
was_precompile_called: false,
precompile_call_logs: Vec::new(),
}
}
pub fn new_oog(gas_limit: u64, memory_offset: Range<usize>) -> Self {
Self::new(InterpreterResult::new_oog(gas_limit), memory_offset)
}
pub fn instruction_result(&self) -> &InstructionResult {
&self.result.result
}
pub fn gas(&self) -> Gas {
self.result.gas
}
pub fn output(&self) -> &Bytes {
&self.result.output
}
pub fn memory_start(&self) -> usize {
self.memory_offset.start
}
pub fn memory_length(&self) -> usize {
self.memory_offset.len()
}
}