test.rs

 1use collections::HashMap;
 2
 3#[cfg(test)]
 4#[ctor::ctor]
 5fn init_logger() {
 6    if std::env::var("RUST_LOG").is_ok() {
 7        env_logger::init();
 8    }
 9}
10
11pub fn marked_text_by(
12    marked_text: &str,
13    markers: Vec<char>,
14) -> (String, HashMap<char, Vec<usize>>) {
15    let mut extracted_markers: HashMap<char, Vec<usize>> = Default::default();
16    let mut unmarked_text = String::new();
17
18    for char in marked_text.chars() {
19        if markers.contains(&char) {
20            let char_offsets = extracted_markers.entry(char).or_insert(Vec::new());
21            char_offsets.push(unmarked_text.len());
22        } else {
23            unmarked_text.push(char);
24        }
25    }
26
27    (unmarked_text, extracted_markers)
28}
29
30pub fn marked_text(marked_text: &str) -> (String, Vec<usize>) {
31    let (unmarked_text, mut markers) = marked_text_by(marked_text, vec!['|']);
32    (unmarked_text, markers.remove(&'|').unwrap_or_else(Vec::new))
33}