#[doc(hidden)]
#[macro_export]
macro_rules! add_boost_and_name {
() => {
pub fn boost<T>(mut self, boost: T) -> Self
where
T: num_traits::AsPrimitive<f32>,
{
self.boost = Some(boost.as_());
self
}
pub fn name<S>(mut self, name: S) -> Self
where
S: ToString,
{
self._name = Some(name.to_string());
self
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! add_aggregate {
() => {
pub fn aggregate<N, A>(mut self, aggregation_name: N, aggregation: A) -> Self
where
N: Into<AggregationName>,
A: Into<Aggregation>,
{
let a = aggregation.into();
let _ = self.aggs.entry(aggregation_name.into()).or_insert(a);
self
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! serialize_with_root {
($root:tt : $inner:ty) => {
impl $crate::serde::Serialize for $inner {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::ser::Serializer,
{
use $crate::serde::ser::SerializeStruct;
struct Wrapper<'a> {
root: &'a $inner,
}
impl<'a> $crate::serde::Serialize for Wrapper<'a> {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
<$inner>::serialize(&self.root, serializer)
}
}
let mut state = serializer.serialize_struct("Wrapper", 1)?;
state.serialize_field($root, &Wrapper { root: self })?;
state.end()
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! deserialize_with_root {
($root:tt : $inner:ty) => {
impl<'de> $crate::serde::Deserialize<'de> for $inner {
fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
where
D: $crate::serde::Deserializer<'de>,
{
use std::fmt;
struct WrapperVisitor;
impl<'de> $crate::serde::de::Visitor<'de> for WrapperVisitor {
type Value = $inner;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("struct Wrapper")
}
fn visit_map<A>(self, mut map: A) -> Result<$inner, A::Error>
where
A: $crate::serde::de::MapAccess<'de>,
{
let mut value = None;
while let Some(key) = map.next_key::<String>()? {
if key == $root {
value = Some(map.next_value()?);
}
}
value.ok_or_else(|| $crate::serde::de::Error::missing_field($root))
}
}
deserializer.deserialize_struct("Wrapper", &[$root], WrapperVisitor)
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! serialize_with_root_keyed {
($root:tt : $inner:ty) => {
impl $crate::serde::Serialize for $inner {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::ser::Serializer,
{
use $crate::serde::ser::SerializeStruct;
struct Wrapper<'a> {
root: &'a $inner,
}
impl<'a> $crate::serde::Serialize for Wrapper<'a> {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
<$inner>::serialize(&self.root, serializer)
}
}
let mut state = serializer.serialize_struct("Wrapper", 1)?;
state.serialize_field(
$root,
&KeyValuePair::new(&self.field, &Wrapper { root: self }),
)?;
state.end()
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! deserialize_with_root_keyed {
($root:tt : $inner:ty) => {
impl<'de> $crate::serde::Deserialize<'de> for $inner {
fn deserialize<D>(deserializer: D) -> ::std::result::Result<Self, D::Error>
where
D: $crate::serde::Deserializer<'de>,
{
use std::fmt;
struct WrapperVisitor;
impl<'de> $crate::serde::de::Visitor<'de> for WrapperVisitor {
type Value = $inner;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("struct Wrapper")
}
fn visit_map<A>(self, mut map: A) -> Result<$inner, A::Error>
where
A: $crate::serde::de::MapAccess<'de>,
{
let mut value = None;
while let Some(key) = map.next_key::<String>()? {
if key == $root {
value = Some(map.next_value()?);
}
}
value.ok_or_else(|| $crate::serde::de::Error::missing_field($root))
}
}
deserializer.deserialize_struct("Wrapper", &[$root], WrapperVisitor)
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! serialize_with_root_key_value_pair {
($root:tt : $inner:ty, $key:ident, $value:ident) => {
impl $crate::serde::Serialize for $inner {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::ser::Serializer,
{
use $crate::serde::ser::SerializeStruct;
struct Wrapper<'a> {
root: &'a $inner,
}
impl<'a> $crate::serde::Serialize for Wrapper<'a> {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
<$inner>::serialize(&self.root, serializer)
}
}
#[derive(Serialize)]
struct KeyValueWrapper<'a, K, V> {
#[serde(flatten)]
wrapper: &'a Wrapper<'a>,
#[serde(flatten)]
pair: KeyValuePair<K, V>,
}
let mut state = serializer.serialize_struct("Wrapper", 1)?;
state.serialize_field(
$root,
&KeyValueWrapper {
pair: KeyValuePair::new(&self.$key, &self.$value),
wrapper: &Wrapper { root: self },
},
)?;
state.end()
}
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! serialize_keyed {
($inner:ty : $field:ident) => {
impl $crate::serde::Serialize for $inner {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::ser::Serializer,
{
use $crate::serde::ser::SerializeMap;
struct Wrapper<'a> {
root: &'a $inner,
}
impl<'a> $crate::serde::Serialize for Wrapper<'a> {
fn serialize<S>(&self, serializer: S) -> ::std::result::Result<S::Ok, S::Error>
where
S: $crate::serde::Serializer,
{
<$inner>::serialize(&self.root, serializer)
}
}
let mut state = serializer.serialize_map(Some(1))?;
state.serialize_entry(&self.$field, &Wrapper { root: self })?;
state.end()
}
}
};
}