use crate::{search::*, util::*, Set};
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct InnerHits {
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
_source: Option<SourceFilter>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
name: Option<String>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
from: Option<u64>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
size: Option<u64>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
sort: SortCollection,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
highlight: Option<Highlight>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
docvalue_fields: Set<String>,
#[serde(default, skip_serializing_if = "ShouldSkip::should_skip")]
collapse: Option<InnerHitsCollapse>,
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
struct InnerHitsCollapse {
field: String,
}
impl InnerHits {
pub fn new() -> Self {
Default::default()
}
pub fn source<T>(mut self, source: T) -> Self
where
T: Into<SourceFilter>,
{
self._source = Some(source.into());
self
}
pub fn name<T>(mut self, name: T) -> Self
where
T: ToString,
{
self.name = Some(name.to_string());
self
}
pub fn from(mut self, from: u64) -> Self {
self.from = Some(from);
self
}
pub fn size(mut self, size: u64) -> Self {
self.size = Some(size);
self
}
pub fn sort<T>(mut self, sort: T) -> Self
where
T: IntoIterator,
T::Item: Into<Sort>,
{
self.sort.extend(sort);
self
}
pub fn highlight<T>(mut self, highlight: T) -> Self
where
T: Into<Highlight>,
{
self.highlight = Some(highlight.into());
self
}
pub fn docvalue_fields<T>(mut self, docvalue_fields: T) -> Self
where
T: IntoIterator,
T::Item: ToString,
{
self.docvalue_fields
.extend(docvalue_fields.into_iter().map(|x| x.to_string()));
self
}
pub fn collapse<T>(mut self, collapse: T) -> Self
where
T: ToString,
{
self.collapse = Some(InnerHitsCollapse {
field: collapse.to_string(),
});
self
}
}