1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use serde::Serialize;
use crate::full_text::multi_match::MultiMatch;
use crate::full_text::query_string::QueryString;
use crate::full_text::r#match::Match;
use crate::full_text::simple_query_string::SimpleQueryString;


#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum QueryField {
    Match(Match),
    MultiMatch(MultiMatch),
    QueryString(QueryString),
    SimpleQueryString(SimpleQueryString),
}

macro_rules! from_types {
    ($($ty:ident),*) => {
        $(
            impl From<$ty> for QueryField {
                fn from(val: $ty) -> Self {
                    Self::$ty(val.into())
                }
            }
        )*
    }
}

from_types! {
    Match,
    MultiMatch,
    QueryString,
    SimpleQueryString
}