use crate::utils::OneOrVec; use crate::UError; pub struct CombinedResult { ok: Vec, err: Vec, } impl CombinedResult { pub fn new() -> Self { Self { ok: vec![], err: vec![], } } pub fn ok>(&mut self, result: I) { self.ok.extend(result.into_vec()); } pub fn err>(&mut self, err: I) { self.err.extend(err.into_vec()); } pub fn unwrap(self) -> Vec { let err_len = self.err.len(); if err_len > 0 { panic!("CombinedResult has {} errors", err_len); } self.ok } pub fn unwrap_one(self) -> T { self.unwrap().pop().unwrap() } pub fn pop_errors(&mut self) -> Vec { self.err.drain(..).collect() } }