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
}
}