include!(concat!(env!("OUT_DIR"), "/mastrust_bindings.rs"));
use std::ffi::CString;
use std::ptr;
pub struct TokenRaw {
pub typ: *mut ::std::os::raw::c_char,
pub value: *mut u8,
pub string: *mut ::std::os::raw::c_char,
pub length: u8,
token: CToken,
}
impl TokenRaw {
pub fn new(_string: CString) -> Self {
let cstring = _string.to_str().unwrap();
let c_char_string = std::ffi::CString::new(cstring).expect("Failed to create CString.");
let c_char_ptr: *mut ::std::os::raw::c_char = c_char_string.into_raw();
let _token = CToken {
type_: c_char_ptr,
value: ptr::null_mut(),
string: c_char_ptr,
length: ptr::null_mut(), };
let mut token_raw = TokenRaw {
typ: c_char_ptr,
value: ptr::null_mut(),
string: c_char_ptr,
length: 0,
token: _token,
};
unsafe {
ctoken_init(&mut token_raw.token, c_char_ptr);
}
token_raw
}
pub fn tokenize(&mut self) {
let _token = &mut self.token;
unsafe {
ctoken_tokenize(_token);
self.value = (*_token).value;
self.length = (*_token).length as u8; }
}
pub fn get_token(&self) -> Vec<u8> {
unsafe {
if self.value.is_null() {
return Vec::new();
}
Vec::from_raw_parts(self.value, self.length as usize, self.length as usize)
}
}
}