cjaggerx/string/debug/
raw.rs

1pub mod include {
2    pub use cjaggerx_sys::jstring::*;
3}
4
5pub struct RawString {
6    pub inner: *mut include::JaggerString,
7}
8
9impl RawString {
10
11    pub fn new(value: *const ::std::os::raw::c_char) -> Self {
12        let origin: *mut include::JaggerString = unsafe {include::JaggerString_create() };
13        unsafe {
14            include::JaggerString_push(origin, value);
15        }
16        Self {
17            inner: origin.clone(),
18        }
19    }
20
21    pub fn push(&mut self, value: *const ::std::os::raw::c_char) -> Result<(), Box<dyn std::error::Error>> {
22        Ok(unsafe {
23            include::JaggerString_push(self.inner, value);
24        })
25    }
26
27    pub fn remove(&mut self, value: *const ::std::os::raw::c_char) -> Result<(), Box<dyn std::error::Error>> {
28        Ok(unsafe {
29            include::JaggerString_remove(self.inner, value);
30        })
31    }
32
33    pub fn get_index(&self, index: usize) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
34        Ok(unsafe {
35            include::JaggerString_get_index(self.inner, index)
36        })
37    }
38
39    pub fn get_exact(&self, start: usize, end: usize) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
40        Ok(unsafe {
41            include::JaggerString_get_exact(self.inner, start, end)
42        })
43    }
44
45    pub fn get(&self) -> Result<*const ::std::os::raw::c_char, Box<dyn std::error::Error>> {
46        Ok(unsafe {
47            include::JaggerString_get(self.inner)
48        })
49    }
50
51    pub fn replace(&mut self, old: usize, new: usize) -> Result<(), Box<dyn std::error::Error>> {
52        Ok(unsafe {
53            include::JaggerString_replace(self.inner, old, new)
54        })
55    }
56
57    pub fn size_from(&self, index: usize) -> Result<usize, Box<dyn std::error::Error>> {
58        Ok(unsafe {
59            include::JaggerString_get_size(self.inner, index)
60        })
61    }
62
63    pub fn size(&self) -> Result<usize, Box<dyn std::error::Error>> {
64        Ok(unsafe {
65            include::JaggerString_get_size_full(self.inner)
66        })
67    }
68
69    pub fn len(&self) -> Result<usize, Box<dyn std::error::Error>> {
70        Ok(unsafe {
71            include::JaggerString_get_len(self.inner)
72        })
73    }
74
75    pub fn status(&self) -> Result<usize, Box<dyn std::error::Error>> {
76        Ok(unsafe {
77            include::JaggerString_get_status(self.inner)
78        })
79    }
80
81    pub fn destroy(&mut self) -> Result<(), Box<dyn std::error::Error>> {
82        Ok(unsafe {
83            include::JaggerString_destroy(self.inner);
84        })
85    }
86
87    pub fn instance(&self) -> Result<RawString, Box<dyn std::error::Error>> {
88        let inst: *mut include::JaggerString = unsafe {include::JaggerString_create()};
89        Ok(RawString {
90            inner: inst.clone(),
91        })
92    }
93
94}
95
96impl Default for RawString {
97    fn default() -> Self {
98        Self {
99            inner: ::std::ptr::null_mut() as *mut include::JaggerString,
100        }
101    }
102}
103
104impl Clone for RawString {
105    fn clone(&self) -> Self {
106        let origin: *mut include::JaggerString = self.inner.clone();
107        Self {
108            inner: origin,
109        }
110    }
111    fn clone_from(&mut self, source: &Self) {
112        let origin: *mut include::JaggerString = source.inner.clone();
113        self.inner = origin;
114    }
115}
116
117impl Copy for RawString {}
118unsafe impl Send for RawString {}
119unsafe impl Sync for RawString {}