use std::ffi::c_void;
use super::types::FfiStr;
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FfiLogLevel {
Error = 0,
Warn = 1,
Info = 2,
Debug = 3,
Trace = 4,
}
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FfiLogLevelFilter {
Off = 0,
Error = 1,
Warn = 2,
Info = 3,
Debug = 4,
Trace = 5,
}
impl FfiLogLevelFilter {
pub fn to_level_filter(self) -> log::LevelFilter {
match self {
FfiLogLevelFilter::Off => log::LevelFilter::Off,
FfiLogLevelFilter::Error => log::LevelFilter::Error,
FfiLogLevelFilter::Warn => log::LevelFilter::Warn,
FfiLogLevelFilter::Info => log::LevelFilter::Info,
FfiLogLevelFilter::Debug => log::LevelFilter::Debug,
FfiLogLevelFilter::Trace => log::LevelFilter::Trace,
}
}
pub fn from_level_filter(filter: log::LevelFilter) -> Self {
match filter {
log::LevelFilter::Off => FfiLogLevelFilter::Off,
log::LevelFilter::Error => FfiLogLevelFilter::Error,
log::LevelFilter::Warn => FfiLogLevelFilter::Warn,
log::LevelFilter::Info => FfiLogLevelFilter::Info,
log::LevelFilter::Debug => FfiLogLevelFilter::Debug,
log::LevelFilter::Trace => FfiLogLevelFilter::Trace,
}
}
pub fn from_u8(value: u8) -> Self {
match value {
0 => FfiLogLevelFilter::Off,
1 => FfiLogLevelFilter::Error,
2 => FfiLogLevelFilter::Warn,
3 => FfiLogLevelFilter::Info,
4 => FfiLogLevelFilter::Debug,
_ => FfiLogLevelFilter::Trace,
}
}
pub fn allows(self, level: FfiLogLevel) -> bool {
let level_as_filter = match level {
FfiLogLevel::Error => FfiLogLevelFilter::Error,
FfiLogLevel::Warn => FfiLogLevelFilter::Warn,
FfiLogLevel::Info => FfiLogLevelFilter::Info,
FfiLogLevel::Debug => FfiLogLevelFilter::Debug,
FfiLogLevel::Trace => FfiLogLevelFilter::Trace,
};
(level_as_filter as u8) <= self as u8
}
}
#[repr(C)]
pub struct FfiLogEntry {
pub level: FfiLogLevel,
pub plugin_id: FfiStr,
pub target: FfiStr,
pub message: FfiStr,
pub timestamp_us: i64,
pub instance_id: FfiStr,
pub component_id: FfiStr,
}
pub type LogCallbackFn = extern "C" fn(ctx: *mut c_void, entry: *const FfiLogEntry);
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FfiLifecycleEventType {
Starting = 0,
Started = 1,
Stopping = 2,
Stopped = 3,
Error = 4,
}
#[repr(C)]
pub struct FfiLifecycleEvent {
pub component_id: FfiStr,
pub component_type: FfiStr,
pub event_type: FfiLifecycleEventType,
pub message: FfiStr,
pub timestamp_us: i64,
}
pub type LifecycleCallbackFn = extern "C" fn(ctx: *mut c_void, event: *const FfiLifecycleEvent);
pub type ConfigResolverFn = extern "C" fn(
ctx: *const c_void,
config_value_json: FfiStr,
) -> super::secret_store::FfiGetSecretResult;