use super::{
DocumentResolver, LoadPolicy, QueryError, QueryExecutionError, QueryRequest, QueryViewResult,
ResolvedContent, validate_query_request,
};
pub struct PreparedQueryRequest<'request> {
request: &'request QueryRequest,
policy: LoadPolicy,
}
impl<'request> PreparedQueryRequest<'request> {
pub fn new(request: &'request QueryRequest, policy: LoadPolicy) -> Result<Self, QueryError> {
validate_query_request(request, policy)?;
Ok(Self { request, policy })
}
#[must_use]
pub const fn request(&self) -> &'request QueryRequest {
self.request
}
#[must_use]
pub const fn policy(&self) -> LoadPolicy {
self.policy
}
pub fn resolve(&self, resolver: &DocumentResolver) -> Result<ResolvedContent, QueryError> {
resolver.resolve_validated(self.request, self.policy)
}
pub fn execute(
&self,
resolver: &DocumentResolver,
) -> Result<QueryViewResult, QueryExecutionError> {
resolver.execute_validated(self.request, self.policy)
}
}