use crate::error::Error;
use crate::http::HttpClient;
use crate::types::common::RequestOptions;
use crate::types::query::{
FindBySortRequest, NlQueryRequest, NlQueryResponse, OsfSearchRequest, OsfSearchResponse,
TermListResponse, UnifiableQueryRequest, UnificationQueryResponse, ValidateTermRequest,
ValidatedUnifyRequest,
};
use crate::types::terms::{TermDto, ValidatedTermResponse, ValidatedUnifyResponse};
#[derive(Debug, Clone)]
pub struct QueryClient {
http: HttpClient,
}
impl QueryClient {
pub(crate) fn new(http: HttpClient) -> Self {
Self { http }
}
pub async fn find_unifiable(
&self,
request: UnifiableQueryRequest,
options: Option<&RequestOptions>,
) -> Result<Vec<TermDto>, Error> {
let response: UnificationQueryResponse = self
.http
.post("/query/unifiable", &request, options)
.await?;
Ok(response.results)
}
pub async fn find_by_sort(
&self,
request: FindBySortRequest,
options: Option<&RequestOptions>,
) -> Result<Vec<TermDto>, Error> {
let response: TermListResponse =
self.http.post("/query/by-sort", &request, options).await?;
Ok(response.terms)
}
pub async fn osf_search(
&self,
request: OsfSearchRequest,
options: Option<&RequestOptions>,
) -> Result<OsfSearchResponse, Error> {
self.http.post("/query/osf-search", &request, options).await
}
pub async fn validate_term(
&self,
request: ValidateTermRequest,
options: Option<&RequestOptions>,
) -> Result<ValidatedTermResponse, Error> {
self.http
.post("/query/validate-term", &request, options)
.await
}
pub async fn validated_unify(
&self,
request: ValidatedUnifyRequest,
options: Option<&RequestOptions>,
) -> Result<ValidatedUnifyResponse, Error> {
self.http
.post("/query/validated-unify", &request, options)
.await
}
pub async fn nl_query(
&self,
request: NlQueryRequest,
options: Option<&RequestOptions>,
) -> Result<NlQueryResponse, Error> {
self.http.post("/nl/query", &request, options).await
}
pub async fn search(
&self,
request: OsfSearchRequest,
options: Option<&RequestOptions>,
) -> Result<OsfSearchResponse, Error> {
self.osf_search(request, options).await
}
pub async fn find_matching(
&self,
request: UnifiableQueryRequest,
options: Option<&RequestOptions>,
) -> Result<Vec<TermDto>, Error> {
self.find_unifiable(request, options).await
}
}