Skip to main content

tablo_test/protocol/
summaries.rs

1//! Reads the summaries under a list's rows: `[data-summary]` names each one's label, and
2//! `[data-summary-count]` holds its count.
3
4use super::dom::{attr_value, tags_where};
5
6/// One summary under a list's rows.
7#[derive(Debug, Clone, PartialEq, Eq)]
8pub struct SummaryFigure {
9    /// The summary's label, in the request's locale.
10    pub label: String,
11    /// The records it counts.
12    pub count: u64,
13}
14
15/// The summaries of every list `html` renders, in document order.
16pub fn summaries(html: &str) -> Vec<SummaryFigure> {
17    tags_where(html, |_, attrs| attr_value(attrs, "data-summary").is_some())
18        .into_iter()
19        .filter_map(|(_, attrs, _)| {
20            Some(SummaryFigure {
21                label: attr_value(&attrs, "data-summary")?,
22                count: attr_value(&attrs, "data-summary-count")?.parse().ok()?,
23            })
24        })
25        .collect()
26}