1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
//! Ceres executor instance
use crate::{
    builder::Builder,
    value::{ReturnValue, Value},
    Result,
};

/// Ceres executor instance
pub trait Instance<T>: Sized {
    type Builder: Builder<T>;

    /// Instantiate a module with the given env builder
    fn new(code: &[u8], builder: &Self::Builder, state: &mut T) -> Result<Self>;

    /// invoke an exported function
    fn invoke(&mut self, name: &str, args: &[Value], state: &mut T) -> Result<ReturnValue>;

    /// Get global value
    fn get_global_val(&self, name: &str) -> Option<Value>;
}