maa_framework/buffer/
string_buffer.rs

1use crate::{
2    error::Error,
3    internal,
4    maa_bool, string, MaaResult,
5};
6
7pub struct MaaStringBuffer {
8    pub(crate) handle: internal::MaaStringBufferHandle,
9    destroy_at_drop: bool,
10}
11
12impl From<internal::MaaStringBufferHandle> for MaaStringBuffer {
13    fn from(handle: internal::MaaStringBufferHandle) -> Self {
14        MaaStringBuffer {
15            handle,
16            destroy_at_drop: false,
17        }
18    }
19}
20
21unsafe impl Send for MaaStringBuffer {}
22unsafe impl Sync for MaaStringBuffer {}
23
24impl MaaStringBuffer {
25    pub fn new() -> Self {
26        let handle = unsafe { internal::MaaCreateStringBuffer() };
27
28        MaaStringBuffer {
29            handle,
30            destroy_at_drop: true,
31        }
32    }
33
34    pub fn string(&self) -> String {
35        let result = unsafe { internal::MaaGetString(self.handle) };
36
37        string!(result)
38    }
39
40    pub fn set_string(&self, content: &str) -> MaaResult<()> {
41        let content_str = internal::to_cstring(content);
42        let ret = unsafe { internal::MaaSetString(self.handle, content_str) };
43
44        maa_bool!(ret, MaaSetStringError, content.to_owned())
45    }
46}
47
48impl Default for MaaStringBuffer {
49    fn default() -> Self {
50        MaaStringBuffer::new()
51    }
52}
53
54impl Drop for MaaStringBuffer {
55    fn drop(&mut self) {
56        if self.destroy_at_drop {
57            unsafe {
58                internal::MaaDestroyStringBuffer(self.handle);
59            }
60        }
61    }
62}