use super::types::{
AccountId,
Balance,
BlockNumber,
BlockTimestamp,
};
#[cfg_attr(test, derive(Debug, PartialEq, Eq))]
#[derive(Default)]
pub struct ExecContext {
pub caller: Option<AccountId>,
pub callee: Option<AccountId>,
pub value_transferred: Balance,
pub block_number: BlockNumber,
pub block_timestamp: BlockTimestamp,
pub contracts: Vec<Vec<u8>>,
}
impl ExecContext {
pub fn new() -> Self {
Default::default()
}
pub fn callee(&self) -> Vec<u8> {
self.callee
.as_ref()
.expect("no callee has been set")
.as_bytes()
.into()
}
pub fn reset(&mut self) {
*self = Default::default();
}
pub fn set_block_timestamp(&mut self, block_timestamp: BlockTimestamp) {
self.block_timestamp = block_timestamp
}
pub fn set_block_number(&mut self, block_number: BlockNumber) {
self.block_number = block_number
}
}
#[cfg(test)]
mod tests {
use super::{
AccountId,
ExecContext,
};
#[test]
fn basic_operations() {
let mut exec_cont = ExecContext::new();
exec_cont.callee = Some(AccountId::from_bytes(&[13]));
exec_cont.caller = Some(AccountId::from_bytes(&[14]));
exec_cont.value_transferred = 15;
assert_eq!(exec_cont.callee(), vec![13]);
exec_cont.reset();
let new_exec_cont = ExecContext::new();
assert_eq!(exec_cont, new_exec_cont);
}
}