use crate::runtime::StoreData;
use wasmtime::{Instance, Module, Store};
pub struct LoadedProgram {
pub name: String,
pub module: Module,
pub priority: i32,
pub consecutive_traps: u32,
pub enabled: bool,
pub max_consecutive_traps: u32,
pub export_name: String,
pub cached: Option<(Store<StoreData>, Instance)>,
}
impl LoadedProgram {
pub fn new(name: String, module: Module, priority: i32) -> Self {
LoadedProgram {
name,
module,
priority,
consecutive_traps: 0,
enabled: true,
max_consecutive_traps: 10,
export_name: "on_hook".to_string(),
cached: None,
}
}
pub fn record_success(&mut self) {
self.consecutive_traps = 0;
}
pub fn drop_cache(&mut self) {
self.cached = None;
}
pub fn record_trap(&mut self) -> bool {
self.consecutive_traps += 1;
if self.consecutive_traps >= self.max_consecutive_traps {
self.enabled = false;
true
} else {
false
}
}
}