use serde_json::{Map, Value};
use std::ffi::c_void;
pub mod fields {
use super::{Map, Value};
pub const CHANNEL_ID: &str = "channel_id";
pub const APP_ID: &str = "app_id";
pub const MESSAGE: &str = "message";
pub const SOURCE: &str = "source";
pub const SOURCE_DRIVER: &str = "driver";
pub const SOURCE_PLUGIN: &str = "plugin";
pub const SOURCE_HOST: &str = "host";
pub const DRIVER_TYPE: &str = "driver_type";
pub const PLUGIN_TYPE: &str = "plugin_type";
pub const TARGET_DRIVER: &str = "driver";
pub const TARGET_PLUGIN: &str = "plugin";
pub const SPAN_DRIVER_LOG: &str = "driver";
pub const SPAN_PLUGIN_LOG: &str = "plugin";
#[inline]
pub fn map_i32(map: &Map<String, Value>, key: &str) -> Option<i32> {
map.get(key)
.and_then(|v| v.as_i64())
.and_then(|v| i32::try_from(v).ok())
}
}
pub const LOG_SINK_ABI_V1: u32 = 1;
pub type LogEmitFn = extern "C" fn(user_data: *mut c_void, ptr: *const u8, len: usize);
pub type LogFlushFn = extern "C" fn(user_data: *mut c_void);
#[repr(C)]
#[derive(Clone, Copy)]
pub struct LogSinkV1 {
pub abi_version: u32,
pub user_data: *mut c_void,
pub emit_json: LogEmitFn,
pub emit_batch_json: Option<LogEmitFn>,
pub flush: Option<LogFlushFn>,
}
unsafe impl Send for LogSinkV1 {}
unsafe impl Sync for LogSinkV1 {}
pub use crate::southward::log::{
get_max_level, init_driver_tracing, set_log_sink, set_max_level, DriverLogBridgeConfig,
};