use crate::{Metrics, element_output::ElementOutput};
use serde::Serialize;
use url::Url;
#[derive(Debug, Serialize)]
pub struct DocumentOutput {
url: Url,
elements: Vec<ElementOutput>,
metrics: Metrics,
}
impl DocumentOutput {
pub fn new(url: Url, elements: Vec<ElementOutput>) -> Self {
Self {
url,
metrics: Metrics::new(
elements
.iter()
.flat_map(ElementOutput::results)
.filter(|result| result.is_ok())
.count(),
elements
.iter()
.flat_map(ElementOutput::results)
.filter(|result| result.is_err())
.count(),
),
elements,
}
}
pub const fn url(&self) -> &Url {
&self.url
}
pub fn elements(&self) -> impl Iterator<Item = &ElementOutput> {
self.elements.iter()
}
pub const fn metrics(&self) -> Metrics {
self.metrics
}
}