lynch_lexer/array/
list.rs1use std::io::Write;
2
3include!(concat!(env!("OUT_DIR"), "/list_bindings.rs"));
4
5#[allow(unused)]
6pub fn create_list(initial_capacity: i32) -> *mut List {
7 unsafe { _CreateList_(initial_capacity) }
8}
9
10#[allow(unused)]
11pub fn append(list: *mut List, element: &str) {
12 let c_element = std::ffi::CString::new(element).unwrap();
13 unsafe { _append_(list, c_element.as_ptr()) }
14}
15
16#[allow(unused)]
17pub fn free_list(list: *mut List) {
18 unsafe { _free_list_(list) }
19}
20
21#[allow(unused)]
22pub fn replace(list: *mut List, old_element: &str, new_element: &str) {
23 let c_old_element = std::ffi::CString::new(old_element).unwrap();
24 let c_new_element = std::ffi::CString::new(new_element).unwrap();
25 unsafe { _replace_(list, c_old_element.as_ptr(), c_new_element.as_ptr()) }
26}
27
28#[allow(unused)]
29pub fn splittext(content: String) -> *mut List {
30 let c_str = std::ffi::CString::new(content).unwrap();
31 let list: *mut List = unsafe { _splittext_(c_str.as_ptr()) };
32 list
33}
34#[allow(unused)]
35fn get_input(prompt: &str) -> String {
36 print!("{}", prompt);
37 std::io::stdout().flush().unwrap(); let mut input = String::new();
39 std::io::stdin().read_line(&mut input).unwrap();
40 input.trim().to_string() }
42#[allow(unused)]
43fn string_to_c_str(content: String) -> std::ffi::CString {
44 std::ffi::CString::new(content).unwrap()
45}
46#[allow(unused)]
47fn c_str_to_string(content: &std::ffi::CStr) -> String {
48 content.to_str().unwrap().to_string()
49}
50
51#[cfg(test)]
52mod tests {
53 use super::*;
54
55 #[test]
56 fn three_test() {
57 let user_input = get_input("Enter a string: ");
58 let c_str = string_to_c_str(user_input);
59 let n_str = c_str_to_string(&c_str);
60 println!("Getting Result");
61 if !n_str.is_empty() {
62 println!("Result: {}", n_str);
63 } else {
64 eprintln!("Error: Failed to get result");
65 }
66 if !c_str.to_bytes().is_empty() {
67 println!("{}", c_str.to_str().unwrap());
69 } else {
70 eprintln!("Error: Failed to get CString");
71 }
72 }
73}