pub mod depends {
pub use dexalt_lib_sys::file::*;
}
use std::ffi::{CStr, CString};
use std::ptr;
pub struct DexaltFile {
pub filepath: CString,
pub filemode: CString,
pub file: *mut depends::FILE,
pub instance: *mut depends::DexaltFile,
}
impl DexaltFile {
pub fn new(filepath: CString, filemode: CString) -> Self {
let mut instance = DexaltFile {
filepath: filepath.clone(),
filemode: filemode.clone(),
file: ptr::null_mut(),
instance: ptr::null_mut(),
};
unsafe {
depends::DexaltFile_init(
&mut instance as *mut _ as *mut depends::DexaltFile,
filepath.as_ptr(),
filemode.as_ptr(),
);
}
instance
}
pub fn open(&mut self) {
unsafe {
depends::DexaltFile_open(self.instance);
}
}
pub fn close(&mut self) {
unsafe {
depends::DexaltFile_close(self.instance);
}
}
pub fn write(&mut self, data: CString) {
let c_data = data.as_ptr();
unsafe {
depends::DexaltFile_write(self.instance, c_data as *const _);
}
}
pub fn read(&mut self) -> CString {
unsafe {
let data_ptr = depends::DexaltFile_read(self.instance);
let c_str = CStr::from_ptr(data_ptr as *const _).to_string_lossy().into_owned();
let c_string = CString::new(c_str).unwrap();
c_string
}
}
pub fn get_filepath(&self) -> CString {
unsafe {
let c_str = CStr::from_ptr(depends::DexaltFile_get_filepath(self.instance))
.to_string_lossy()
.into_owned();
let c_string = CString::new(c_str).unwrap();
c_string
}
}
pub fn get_filemode(&self) -> CString {
unsafe {
let c_str = CStr::from_ptr(depends::DexaltFile_get_filemode(self.instance))
.to_string_lossy()
.into_owned();
let c_string = CString::new(c_str).unwrap();
c_string
}
}
pub fn get_filesize(&self) -> f32 {
unsafe { depends::DexaltFile_get_filesize(self.instance) }
}
}
impl Drop for DexaltFile {
fn drop(&mut self) {
unsafe {
depends::DexaltFile_destroy(self.instance)
}
}
}