#[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! 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! 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()
}
}
};
}