use std::collections::HashMap;
use crate::client::OpenLibraryClient;
use crate::error::{Error, Result};
use crate::models::query::QueryResponse;
use crate::validation::validate_limit;
impl OpenLibraryClient {
pub async fn query(
&self,
type_: &str,
fields: &HashMap<String, String>,
limit: u32,
offset: u32,
) -> Result<QueryResponse> {
if type_.is_empty() {
return Err(Error::InvalidInput("query type must not be empty".into()));
}
validate_limit(limit)?;
let mut url = self.base_url.join("query.json")?;
{
let mut qp = url.query_pairs_mut();
qp.append_pair("type", type_);
qp.append_pair("limit", &limit.to_string());
qp.append_pair("offset", &offset.to_string());
for (k, v) in fields {
qp.append_pair(k, v);
}
}
self.get_json(url).await
}
}