#![allow(dead_code)]
use std::ffi::c_char;
use blazen_uniffi::agent::AgentResult as InnerAgentResult;
use crate::llm_records::BlazenTokenUsage;
use crate::string::alloc_cstring;
pub struct BlazenAgentResult(pub(crate) InnerAgentResult);
impl BlazenAgentResult {
pub(crate) fn into_ptr(self) -> *mut BlazenAgentResult {
Box::into_raw(Box::new(self))
}
}
impl From<InnerAgentResult> for BlazenAgentResult {
fn from(inner: InnerAgentResult) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_final_message(
result: *const BlazenAgentResult,
) -> *mut c_char {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
alloc_cstring(&result.0.final_message)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_iterations(result: *const BlazenAgentResult) -> u32 {
if result.is_null() {
return 0;
}
let result = unsafe { &*result };
result.0.iterations
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_tool_call_count(
result: *const BlazenAgentResult,
) -> u32 {
if result.is_null() {
return 0;
}
let result = unsafe { &*result };
result.0.tool_call_count
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_total_usage(
result: *const BlazenAgentResult,
) -> *mut BlazenTokenUsage {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
BlazenTokenUsage::from(result.0.total_usage.clone()).into_ptr()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_total_cost_usd(
result: *const BlazenAgentResult,
) -> f64 {
if result.is_null() {
return 0.0;
}
let result = unsafe { &*result };
result.0.total_cost_usd
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_agent_result_free(result: *mut BlazenAgentResult) {
if result.is_null() {
return;
}
drop(unsafe { Box::from_raw(result) });
}