Mintaka_Utils/
ForeignString.rs

1// Copyright (c) TribuFu. All Rights Reserved.
2
3use 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    /// Convert this string to a char pointer.
12    fn ToCharPointer(self) -> *const c_char;
13
14    /// Parse string from char pointer.
15    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
30/// Convert Rust string to C string.
31pub fn FromString(string: String) -> *const c_char {
32    string.ToCharPointer()
33}
34
35/// Convert C string to Rust string.
36pub fn ToString(pointer: *const c_char) -> String {
37    String::FromCharPointer(pointer)
38}