1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/// Simple parse function for a string token with an arbitrary delimeter
pub fn parse_str<const DELIMITER: char>(input: &str) -> Option<(&str, &str)> {
    if !input.starts_with(DELIMITER) {
        return None;
    }
    let mut escaped = false;
    let mut iter = input.char_indices().skip(1);
    while let Some((i, c)) = iter.next() {
        if escaped {
            escaped = false;
            continue;
        }
        if c == '\\' {
            escaped = true;
            continue;
        }
        if c == DELIMITER {
            if let Some((_, c)) = iter.next() {
                if c == DELIMITER {
                    continue;
                }
            }
            return Some((&input[..i + c.len_utf8()], &input[i + c.len_utf8()..]));
        }
    }

    None
}