use std::fmt::Debug;
#[derive(Debug, Clone, PartialEq)]
pub struct BrcdResult<T> {
ranks: Vec<Vec<usize>>,
posterior: Vec<T>,
}
impl<T> BrcdResult<T> {
pub fn new(ranks: Vec<Vec<usize>>, posterior: Vec<T>) -> Self {
Self { ranks, posterior }
}
}
impl<T> BrcdResult<T> {
pub fn ranks(&self) -> &[Vec<usize>] {
&self.ranks
}
pub fn posterior(&self) -> &[T] {
&self.posterior
}
pub fn top(&self) -> Option<&[usize]> {
self.ranks.first().map(Vec::as_slice)
}
}
impl<T> std::fmt::Display for BrcdResult<T>
where
T: Debug,
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "--- BRCD Root-Cause Ranking ---")?;
for (rank, (candidate, weight)) in self.ranks.iter().zip(self.posterior.iter()).enumerate()
{
writeln!(f, "{}. {:?} posterior={:?}", rank + 1, candidate, weight)?;
}
Ok(())
}
}