cjaggerx 0.1.1

Rust bindings for the CJaggerX library
Documentation
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 {}