maa_framework/buffer/
string_buffer.rs1use 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}