mod request;
mod snapshot;
#[cfg(test)]
mod tests;
use crate::{
diagnostic::StyleDiagnostic,
report::{ReportRow, ReportRowKind},
};
use std::collections::BTreeMap;
pub use request::{QueryReport, QueryRequest};
pub(crate) use snapshot::CachedQueryRecord;
const MAX_SOURCE_ENDPOINT_BYTES: usize = 256;
#[derive(Default)]
pub struct QueryExample {
records: BTreeMap<String, CachedQueryRecord>,
}
impl QueryExample {
pub fn record_query(
&mut self,
query_name: impl Into<String>,
source_endpoint: impl Into<String>,
) -> Result<QueryReport, StyleDiagnostic> {
let request = QueryRequest::new(query_name, source_endpoint)?;
let record = request.cached_record();
let row = ReportRow::new(ReportRowKind::CacheRefresh, request.query_name())?;
self.records.insert(request.query_name().to_owned(), record);
Ok(QueryReport::new(request, row))
}
#[must_use]
pub fn record_source_endpoint(&self, query_name: &str) -> Option<&str> {
self.records
.get(query_name)
.map(CachedQueryRecord::source_endpoint)
}
#[must_use]
pub fn record_query_name(&self, query_name: &str) -> Option<&str> {
self.records
.get(query_name)
.map(CachedQueryRecord::query_name)
}
pub fn read_row(&self, query_name: &str) -> Result<ReportRow, StyleDiagnostic> {
ReportRow::new(ReportRowKind::CacheRead, query_name)
}
#[must_use]
pub const fn max_source_endpoint_bytes() -> usize {
MAX_SOURCE_ENDPOINT_BYTES
}
}