pub mod messages;
use crate::{lua_vm::LuaVM, yara_engine::YaraEngine};
use kameo::{actor::ActorRef, error::BoxError, mailbox::unbounded::UnboundedMailbox, Actor};
#[derive(Default)]
pub struct System {
lua_vm: Option<ActorRef<LuaVM>>,
scan_engines: ScanEngines,
}
impl Actor for System {
type Mailbox = UnboundedMailbox<Self>;
async fn on_start(&mut self, system: ActorRef<Self>) -> Result<(), BoxError> {
self.lua_vm = Some(kameo::spawn(LuaVM::default()));
self.scan_engines.yara = Some(kameo::spawn(YaraEngine::default()));
if let Some(ref lua_vm) = self.lua_vm {
system.link(lua_vm).await;
}
if let Some(ref yara_engine) = self.scan_engines.yara {
system.link(yara_engine).await;
}
Ok(())
}
fn name() -> &'static str {
"sscan_system"
}
}
#[derive(Default)]
struct ScanEngines {
yara: Option<ActorRef<YaraEngine>>,
}