use std::os::raw::{c_char, c_void};
pub type SessionPtr = *mut c_void;
pub type ChunkCallbackWithData = extern "C" fn(*const c_char, *mut c_void);
pub type DoneCallbackWithData = extern "C" fn(*mut c_void);
pub type ErrorCallbackWithData = extern "C" fn(*const c_char, *mut c_void);
unsafe extern "C" {
pub fn fm_check_availability() -> bool;
pub fn fm_create_session(instructions: *const c_char) -> SessionPtr;
pub fn fm_create_session_from_transcript(transcript_json: *const c_char) -> SessionPtr;
pub fn fm_destroy_session(session: SessionPtr);
pub fn fm_get_transcript_json(session: SessionPtr) -> *mut c_char;
pub fn fm_free_string(ptr: *mut c_char);
pub fn fm_session_response(
session: SessionPtr,
prompt: *const c_char,
user_data: *mut c_void,
on_chunk: ChunkCallbackWithData,
on_done: DoneCallbackWithData,
on_error: ErrorCallbackWithData,
);
pub fn fm_session_stream(
session: SessionPtr,
prompt: *const c_char,
user_data: *mut c_void,
on_chunk: ChunkCallbackWithData,
on_done: DoneCallbackWithData,
on_error: ErrorCallbackWithData,
);
pub fn fm_session_cancel_stream(session: SessionPtr);
}