use crate::diagnostics::Result;
use crate::eval::Value;
#[derive(Debug, Clone)]
pub struct ParallelResult {
pub results: Vec<Result<Value>>,
pub elapsed: std::time::Duration,
pub threads_used: usize,
}
impl ParallelResult {
pub fn new(
results: Vec<Result<Value>>,
elapsed: std::time::Duration,
threads_used: usize
) -> Self {
Self {
results,
elapsed,
threads_used,
}
}
pub fn results(&self) -> &[Result<Value>] {
&self.results
}
pub fn elapsed(&self) -> std::time::Duration {
self.elapsed
}
pub fn threads_used(&self) -> usize {
self.threads_used
}
pub fn all_succeeded(&self) -> bool {
self.results.iter().all(|r| r.is_ok())
}
pub fn first_error(&self) -> Option<&crate::diagnostics::Error> {
self.results.iter().find_map(|r| r.as_ref().err().map(|e| e.as_ref()))
}
}