use super::{Rules, flip, infer_types};
use crate::Ambiguity;
use crate::classify::Classification;
use crate::error::ParseError;
use crate::triple::Triple;
pub(crate) fn process(
triple: Triple,
classification: &Classification,
rules: &Rules,
ambiguity: Ambiguity,
) -> Result<Triple, ParseError> {
let triple = infer_types(triple, rules, ambiguity)?;
match flip::able(&triple, classification, rules) {
Some(true) => Ok(flip::it(&triple, classification, rules)),
Some(false) => Ok(triple),
None => Err(ParseError::InvalidTriple(Box::new(triple))),
}
}