reifydb-extension 0.4.9

Unified extension loading for ReifyDB (FFI, WASM, native)
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

//! Logging callbacks for FFI operators
//!
//! Allows FFI operators to emit log messages at various severity levels.

use std::slice;

use tracing::{debug, error, info, trace, warn};

/// Log a message from an FFI operator
///
/// # Parameters
/// - `operator_id`: The operator ID for identifying the source
/// - `level`: Log level (0=trace, 1=debug, 2=info, 3=warn, 4=error)
/// - `message`: Message bytes (not null-terminated)
/// - `message_len`: Length of message in bytes
///
/// # Safety
///
/// - `message` must be valid for reading `message_len` bytes, or null (in which case this is a no-op).
#[unsafe(no_mangle)]
pub unsafe extern "C" fn host_log_message(operator_id: u64, level: u32, message: *const u8, message_len: usize) {
	if message.is_null() {
		return;
	}

	// Convert message to string using provided length
	let msg_str = unsafe {
		let bytes = slice::from_raw_parts(message, message_len);
		String::from_utf8_lossy(bytes)
	};

	// Log based on level
	match level {
		0 => trace!("FFI Operator[{}]: {}", operator_id, msg_str),
		1 => debug!("FFI Operator[{}]: {}", operator_id, msg_str),
		2 => info!("FFI Operator[{}]: {}", operator_id, msg_str),
		3 => warn!("FFI Operator[{}]: {}", operator_id, msg_str),
		4 => error!("FFI Operator[{}]: {}", operator_id, msg_str),
		_ => info!("FFI Operator[{}]: {}", operator_id, msg_str),
	}
}