#![allow(dead_code)]
use std::ffi::c_char;
use blazen_uniffi::compute::{
ImageGenResult as InnerImageGenResult, SttResult as InnerSttResult, TtsResult as InnerTtsResult,
};
use crate::llm_records::BlazenMedia;
use crate::string::alloc_cstring;
pub struct BlazenTtsResult(pub(crate) InnerTtsResult);
impl BlazenTtsResult {
pub(crate) fn into_ptr(self) -> *mut BlazenTtsResult {
Box::into_raw(Box::new(self))
}
}
impl From<InnerTtsResult> for BlazenTtsResult {
fn from(inner: InnerTtsResult) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_tts_result_audio_base64(
result: *const BlazenTtsResult,
) -> *mut c_char {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
alloc_cstring(&result.0.audio_base64)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_tts_result_mime_type(
result: *const BlazenTtsResult,
) -> *mut c_char {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
alloc_cstring(&result.0.mime_type)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_tts_result_duration_ms(result: *const BlazenTtsResult) -> u64 {
if result.is_null() {
return 0;
}
let result = unsafe { &*result };
result.0.duration_ms
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_tts_result_free(result: *mut BlazenTtsResult) {
if result.is_null() {
return;
}
drop(unsafe { Box::from_raw(result) });
}
pub struct BlazenSttResult(pub(crate) InnerSttResult);
impl BlazenSttResult {
pub(crate) fn into_ptr(self) -> *mut BlazenSttResult {
Box::into_raw(Box::new(self))
}
}
impl From<InnerSttResult> for BlazenSttResult {
fn from(inner: InnerSttResult) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_stt_result_transcript(
result: *const BlazenSttResult,
) -> *mut c_char {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
alloc_cstring(&result.0.transcript)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_stt_result_language(result: *const BlazenSttResult) -> *mut c_char {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
alloc_cstring(&result.0.language)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_stt_result_duration_ms(result: *const BlazenSttResult) -> u64 {
if result.is_null() {
return 0;
}
let result = unsafe { &*result };
result.0.duration_ms
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_stt_result_free(result: *mut BlazenSttResult) {
if result.is_null() {
return;
}
drop(unsafe { Box::from_raw(result) });
}
pub struct BlazenImageGenResult(pub(crate) InnerImageGenResult);
impl BlazenImageGenResult {
pub(crate) fn into_ptr(self) -> *mut BlazenImageGenResult {
Box::into_raw(Box::new(self))
}
}
impl From<InnerImageGenResult> for BlazenImageGenResult {
fn from(inner: InnerImageGenResult) -> Self {
Self(inner)
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_gen_result_images_count(
result: *const BlazenImageGenResult,
) -> usize {
if result.is_null() {
return 0;
}
let result = unsafe { &*result };
result.0.images.len()
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_gen_result_images_get(
result: *const BlazenImageGenResult,
idx: usize,
) -> *mut BlazenMedia {
if result.is_null() {
return std::ptr::null_mut();
}
let result = unsafe { &*result };
match result.0.images.get(idx) {
Some(media) => BlazenMedia::from(media.clone()).into_ptr(),
None => std::ptr::null_mut(),
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn blazen_image_gen_result_free(result: *mut BlazenImageGenResult) {
if result.is_null() {
return;
}
drop(unsafe { Box::from_raw(result) });
}