pub trait SystemPlugin {
// Required method
fn gen_interfaces(&self) -> Vec<SysPluginSignature>;
// Provided methods
fn on_init(&mut self, _machine: &mut Machine) -> ReturnCode { ... }
fn after_main(&mut self, _machine: &mut Machine) -> ReturnCode { ... }
fn on_sample(&mut self, _time: Time, _machine: &mut Machine) -> ReturnCode { ... }
fn try_get_main_loop(&mut self) -> Option<Box<dyn FnOnce()>> { ... }
}