pub mod include {
pub use cjaggerx_sys::jstring::*;
}
pub struct RawString {
pub inner: *mut include::JaggerString,
}
impl RawString {
pub fn new(value: *const ::std::os::raw::c_char) -> Self {
let origin: *mut include::JaggerString = unsafe {include::JaggerString_create() };
unsafe {
include::JaggerString_push(origin, value);
}
Self {
inner: origin.clone(),
}
}
pub fn push(&mut self, value: *const ::std::os::raw::c_char) -> Result<(), Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_push(self.inner, value);
})
}
pub fn remove(&mut self, value: *const ::std::os::raw::c_char) -> Result<(), Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_remove(self.inner, value);
})
}
pub fn get_index(&self, index: usize) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_index(self.inner, index)
})
}
pub fn get_exact(&self, start: usize, end: usize) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_exact(self.inner, start, end)
})
}
pub fn get(&self) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get(self.inner)
})
}
pub fn replace(&mut self, old: usize, new: usize) -> Result<(), Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_replace(self.inner, old, new)
})
}
pub fn size_from(&self, index: usize) -> Result<usize, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_size(self.inner, index)
})
}
pub fn size(&self) -> Result<usize, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_size_full(self.inner)
})
}
pub fn len(&self) -> Result<usize, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_len(self.inner)
})
}
pub fn status(&self) -> Result<usize, Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_get_status(self.inner)
})
}
pub fn destroy(&mut self) -> Result<(), Box<dyn std::error::Error>> {
Ok(unsafe {
include::JaggerString_destroy(self.inner);
})
}
pub fn instance(&self) -> Result<RawString, Box<dyn std::error::Error>> {
let inst: *mut include::JaggerString = unsafe {include::JaggerString_create()};
Ok(RawString {
inner: inst.clone(),
})
}
}
impl Default for RawString {
fn default() -> Self {
Self {
inner: ::std::ptr::null_mut() as *mut include::JaggerString,
}
}
}
impl Clone for RawString {
fn clone(&self) -> Self {
let origin: *mut include::JaggerString = self.inner.clone();
Self {
inner: origin,
}
}
fn clone_from(&mut self, source: &Self) {
let origin: *mut include::JaggerString = source.inner.clone();
self.inner = origin;
}
}
impl Copy for RawString {}
unsafe impl Send for RawString {}
unsafe impl Sync for RawString {}