mod functions;
mod mock_data;
pub mod notification;
pub mod state;
use std::ffi::{c_char, CString};
use std::ptr::null;
pub fn to_optional_c_string(opt_s: Option<String>) -> *const c_char {
match opt_s {
Some(s) => CString::new(s).unwrap().into_raw(),
None => std::ptr::null(),
}
}
pub fn to_c_string(s: String) -> *const c_char {
CString::new(s).unwrap().into_raw()
}
pub fn append_c_terminator<T>(vec: Vec<*const T>) -> *const *const T {
let mut vec = vec;
vec.push(null());
Box::into_raw(vec.into_boxed_slice()) as *const *const T
}
pub unsafe fn free_c_string(s: *const c_char) {
if s.is_null() {
return;
}
let _ = CString::from_raw(s as *mut c_char);
}