use crate::base::Plugin;
use crate::event::AsyncEvent;
use crate::plugin::async_event::async_handler::AsyncHandler;
use crate::plugin::async_event::wrappers::AsyncPluginExported;
use falco_event::events::Event;
pub mod async_handler;
pub mod background_task;
#[doc(hidden)]
pub mod wrappers;
pub trait AsyncEventPlugin: Plugin + AsyncPluginExported {
const ASYNC_EVENTS: &'static [&'static str];
const EVENT_SOURCES: &'static [&'static str];
fn start_async(&mut self, handler: AsyncHandler) -> Result<(), anyhow::Error>;
fn stop_async(&mut self) -> Result<(), anyhow::Error>;
fn dump_state(&mut self, _handler: AsyncHandler) -> Result<(), anyhow::Error> {
Ok(())
}
fn async_event<'a>(
name: &'a std::ffi::CStr,
data: &'a [u8],
) -> Event<AsyncEvent<'a, &'a [u8]>> {
let event = AsyncEvent {
plugin_id: 0, name,
data,
};
let metadata = falco_event::events::EventMetadata::default();
Event {
metadata,
params: event,
}
}
}