use crate::call_def::CallDef;
use crate::prelude::*;
use crate::ContractContainer;
use crate::{casper_types::bytesrepr::Bytes, VmError};
#[derive(Default)]
pub struct ContractRegister {
contracts: BTreeMap<Address, ContractContainer>
}
impl ContractRegister {
pub fn add(&mut self, addr: Address, container: ContractContainer) {
self.contracts.insert(addr, container);
}
pub fn call(&self, addr: &Address, call_def: CallDef) -> OdraResult<Bytes> {
if let Some(contract) = self.contracts.get(addr) {
return contract.call(call_def);
}
Err(OdraError::VmError(VmError::InvalidContractAddress))
}
pub fn get(&self, addr: &Address) -> Option<&str> {
match self.contracts.get(addr) {
Some(contract) => Some(contract.name()),
None => None
}
}
pub fn post_install(&mut self, addr: &Address) {
if let Some(contract) = self.contracts.get_mut(addr) {
contract.post_install();
}
}
}