use crate::{diagnostic::StyleDiagnostic, query::CachedQueryRecord, report::ReportRow};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct QueryRequest {
query_name: String,
source_endpoint: String,
}
impl QueryRequest {
pub fn new(
query_name: impl Into<String>,
source_endpoint: impl Into<String>,
) -> Result<Self, StyleDiagnostic> {
let query_name = query_name.into();
let query_name = query_name.trim();
let source_endpoint = source_endpoint.into();
let source_endpoint = source_endpoint.trim();
if query_name.is_empty() {
return Err(StyleDiagnostic::empty_query_name());
}
if source_endpoint.is_empty() {
return Err(StyleDiagnostic::empty_source_endpoint());
}
Ok(Self {
query_name: query_name.to_owned(),
source_endpoint: source_endpoint.to_owned(),
})
}
#[must_use]
pub fn query_name(&self) -> &str {
&self.query_name
}
#[must_use]
pub fn source_endpoint(&self) -> &str {
&self.source_endpoint
}
#[must_use]
pub(crate) fn cached_record(&self) -> CachedQueryRecord {
CachedQueryRecord::new(&self.query_name, &self.source_endpoint)
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct QueryReport {
request: QueryRequest,
row: ReportRow,
}
impl QueryReport {
#[must_use]
pub const fn new(request: QueryRequest, row: ReportRow) -> Self {
Self { request, row }
}
#[must_use]
pub const fn request(&self) -> &QueryRequest {
&self.request
}
#[must_use]
pub const fn row(&self) -> &ReportRow {
&self.row
}
}