fn validate_structure()

in src/repl_helper.rs [181:210]


fn validate_structure(input: &str) -> ValidationResult {
    let mut stack = vec![];
    let mut iter = input.chars().peekable();
    while let Some(c) = iter.next() {
        if let Some(starts) = StructureCheck::starts(c, iter.peek()) {
            stack.push(starts);
        }

        if let Some(completes) = StructureCheck::completes(c, iter.peek()) {
            if let Some(top) = stack.pop() {
                if completes != top {
                    return ValidationResult::Invalid(Some(format!(
                        "Invalid input, expecting: {}",
                        top
                    )));
                }
            } else {
                return ValidationResult::Invalid(Some(format!(
                    "Invalid input: {} is unpaired",
                    completes
                )));
            }
        }
    }
    if stack.is_empty() {
        ValidationResult::Valid(None)
    } else {
        ValidationResult::Incomplete
    }
}