Skip to main content

reifydb_engine/ffi/callbacks/
logging.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4//! Logging callbacks for FFI operators
5//!
6//! Allows FFI operators to emit log messages at various severity levels.
7
8use std::slice;
9
10use tracing::{debug, error, info, trace, warn};
11
12/// Log a message from an FFI operator
13///
14/// # Parameters
15/// - `operator_id`: The operator ID for identifying the source
16/// - `level`: Log level (0=trace, 1=debug, 2=info, 3=warn, 4=error)
17/// - `message`: Message bytes (not null-terminated)
18/// - `message_len`: Length of message in bytes
19#[unsafe(no_mangle)]
20pub extern "C" fn host_log_message(operator_id: u64, level: u32, message: *const u8, message_len: usize) {
21	if message.is_null() {
22		return;
23	}
24
25	// Convert message to string using provided length
26	let msg_str = unsafe {
27		let bytes = slice::from_raw_parts(message, message_len);
28		String::from_utf8_lossy(bytes)
29	};
30
31	// Log based on level
32	match level {
33		0 => trace!("FFI Operator[{}]: {}", operator_id, msg_str),
34		1 => debug!("FFI Operator[{}]: {}", operator_id, msg_str),
35		2 => info!("FFI Operator[{}]: {}", operator_id, msg_str),
36		3 => warn!("FFI Operator[{}]: {}", operator_id, msg_str),
37		4 => error!("FFI Operator[{}]: {}", operator_id, msg_str),
38		_ => info!("FFI Operator[{}]: {}", operator_id, msg_str),
39	}
40}