Mintaka_Utils/
ForeignString.rs1use libc::c_char;
4use std::ffi::{CStr, CString};
5
6#[allow(clippy::not_unsafe_ptr_arg_deref)]
7pub trait ForeignString
8where
9 Self: Sized,
10{
11 fn ToCharPointer(self) -> *const c_char;
13
14 fn FromCharPointer(pointer: *const c_char) -> String;
16}
17
18impl ForeignString for String {
19 fn ToCharPointer(self) -> *const c_char {
20 CString::new(self).unwrap().into_raw()
21 }
22
23 fn FromCharPointer(pointer: *const c_char) -> String {
24 let contents = unsafe { CStr::from_ptr(pointer) };
25
26 contents.to_str().unwrap().to_string()
27 }
28}
29
30pub fn FromString(string: String) -> *const c_char {
32 string.ToCharPointer()
33}
34
35pub fn ToString(pointer: *const c_char) -> String {
37 String::FromCharPointer(pointer)
38}