lynch_lexer/array/
list.rs

1use 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(); // Stellt sicher, dass die Aufforderung sofort angezeigt wird
38    let mut input = String::new();
39    std::io::stdin().read_line(&mut input).unwrap();
40    input.trim().to_string() // Entfernt führende und nachfolgende Leerzeichen und gibt die bereinigte Eingabe zurück
41}
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            // Print c string to device
68            println!("{}", c_str.to_str().unwrap());
69        } else {
70            eprintln!("Error: Failed to get CString");
71        }
72    }
73}