use crate::error::Error;
use crate::models::response::SolrDocsResponse;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};
use serde_json::value::RawValue;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct SolrGroupResult {
matches: usize,
#[serde(rename = "ngroups")]
n_groups: Option<usize>,
groups: Option<Vec<SolrGroupFieldResult>>,
#[serde(rename = "doclist")]
doc_list: Option<SolrDocsResponse>,
}
impl SolrGroupResult {
pub fn get_field_result(&self) -> Option<&[SolrGroupFieldResult]> {
self.groups.as_deref()
}
pub fn get_query_result(&self) -> Option<&SolrDocsResponse> {
self.doc_list.as_ref()
}
pub fn get_simple_result(&self) -> Option<&SolrDocsResponse> {
self.doc_list.as_ref()
}
pub fn get_matches(&self) -> usize {
self.matches
}
pub fn get_n_groups(&self) -> Option<usize> {
self.n_groups
}
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct SolrGroupFieldResult {
#[serde(rename = "groupValue")]
group_value: Box<RawValue>,
#[serde(rename = "doclist")]
doc_list: SolrDocsResponse,
}
impl SolrGroupFieldResult {
pub fn get_group_value<K: DeserializeOwned>(&self) -> Result<K, Error> {
serde_json::from_str(self.group_value.get()).map_err(Error::from)
}
pub fn get_doc_list(&self) -> &SolrDocsResponse {
&self.doc_list
}
}