use super::types::{Admission, Selection};
use crate::descriptor::Row;
use crate::report::{NotSelectedReason, TrialId};
pub(super) fn admission(selection: &Selection, row: &Row, trial: TrialId) -> Admission {
match passed_over(selection, row, trial) {
None => Admission::Selected,
Some(reason) => Admission::NotSelected(reason),
}
}
fn passed_over(selection: &Selection, row: &Row, trial: TrialId) -> Option<NotSelectedReason> {
match selection {
Selection::All => None,
Selection::ByClaim(claims) => {
(!claims.contains(&row.claim())).then_some(NotSelectedReason::OutsideSelection)
}
Selection::ByExecutionSuite(suites) => {
(!suites.contains(&row.execution_suite())).then_some(NotSelectedReason::SuiteNotRun)
}
Selection::ByTrialIds(trials) => {
(!trials.contains(&trial)).then_some(NotSelectedReason::OutsideSelection)
}
Selection::BySubjectRoute(routes) => {
(!routes.contains(&row.subject())).then_some(NotSelectedReason::OutsideSelection)
}
}
}