use crate::bindings::root::{InitDefaultStreamMgr, TermDefaultStreamMgr, AK};
use crate::settings::{AkDeviceSettings, AkStreamMgrSettings};
use crate::{ak_call_result, to_os_char, AkResult};
pub fn init(settings: &AkStreamMgrSettings) -> Result<(), AkResult> {
let addr = unsafe { AK::StreamMgr::Create(settings) };
if addr == std::ptr::null_mut() {
Err(AkResult::AK_Fail)
} else {
Ok(())
}
}
pub fn init_default_stream_mgr<T: AsRef<str>>(
stream_mgr_settings: &AkStreamMgrSettings,
device_settings: &mut AkDeviceSettings,
bank_location: T,
) -> Result<(), AkResult> {
init(stream_mgr_settings)?;
device_settings.use_stream_cache = true;
let device_settings = device_settings.as_ak();
let pin_bytes = to_os_char(&bank_location);
ak_call_result![InitDefaultStreamMgr(&device_settings, pin_bytes.as_ptr())]
}
pub fn term_default_stream_mgr() {
unsafe {
TermDefaultStreamMgr();
}
}
pub fn set_current_language<T: AsRef<str>>(language_name: T) -> Result<(), AkResult> {
let pin_bytes = to_os_char(&language_name);
ak_call_result![AK::StreamMgr::SetCurrentLanguage(pin_bytes.as_ptr())]
}