Skip to main content

opensearch_dsl/search/queries/params/
simple_query_string_query.rs

1use std::fmt;
2
3use serde::{
4    de::{Error, Unexpected, Visitor},
5    ser::{Serialize, Serializer},
6    Deserialize, Deserializer,
7};
8/// You can use the flags parameter to enable more optional operators for
9/// Lucene’s regular expression engine.
10#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
11pub enum SimpleQueryStringQueryFlags {
12    /// Enables all optional operators.
13    All,
14
15    /// Enables the `+` AND operator.
16    And,
17
18    /// Enables `\` as an escape character.
19    Escape,
20
21    /// Enables the `~N` operator after a word, where `N` is an integer
22    /// denoting the allowed edit distance for matching. See
23    /// [Fuzziness](https://www.elastic.co/guide/en/opensearch/reference/current/common-options.html#fuzziness).
24    Fuzzy,
25
26    /// Enables the `~N` operator, after a phrase where `N` is the maximum
27    /// number of positions allowed between matching tokens. Synonymous to
28    /// [SLOP](SimpleQueryStringQueryFlags::Slop).
29    Near,
30
31    /// Disables all operators.
32    None,
33
34    /// Enables the `-` NOT operator.
35    Not,
36
37    /// Enables the `\|` OR operator.
38    Or,
39
40    /// Enables the `"` quotes operator used to search for phrases.
41    Phrase,
42
43    /// Enables the `(` and `)` operators to control operator precedence.
44    Precedence,
45
46    /// Enables the `*` prefix operator.
47    Prefix,
48
49    /// Enables the `~N` operator, after a phrase where `N` is maximum
50    /// number of positions allowed between matching tokens. Synonymous to
51    /// [NEAR](SimpleQueryStringQueryFlags::Near).
52    Slop,
53
54    /// Enables whitespace as split characters.
55    Whitespace,
56}
57
58impl From<SimpleQueryStringQueryFlags> for &'static str {
59    fn from(value: SimpleQueryStringQueryFlags) -> Self {
60        match value {
61            SimpleQueryStringQueryFlags::All => "ALL",
62            SimpleQueryStringQueryFlags::And => "AND",
63            SimpleQueryStringQueryFlags::Escape => "ESCAPE",
64            SimpleQueryStringQueryFlags::Fuzzy => "FUZZY",
65            SimpleQueryStringQueryFlags::Near => "NEAR",
66            SimpleQueryStringQueryFlags::None => "NONE",
67            SimpleQueryStringQueryFlags::Not => "NOT",
68            SimpleQueryStringQueryFlags::Or => "OR",
69            SimpleQueryStringQueryFlags::Phrase => "PHRASE",
70            SimpleQueryStringQueryFlags::Precedence => "PRECEDENCE",
71            SimpleQueryStringQueryFlags::Prefix => "PREFIX",
72            SimpleQueryStringQueryFlags::Slop => "SLOP",
73            SimpleQueryStringQueryFlags::Whitespace => "WHITESPACE",
74        }
75    }
76}
77
78impl From<SimpleQueryStringQueryFlags> for String {
79    fn from(value: SimpleQueryStringQueryFlags) -> Self {
80        <&'static str>::from(value).to_string()
81    }
82}
83
84impl fmt::Display for SimpleQueryStringQueryFlags {
85    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
86        <&'static str>::from(*self).fmt(f)
87    }
88}
89
90impl Serialize for SimpleQueryStringQueryFlags {
91    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
92    where
93        S: Serializer,
94    {
95        <&'static str>::from(*self).serialize(serializer)
96    }
97}
98
99impl<'de> Deserialize<'de> for SimpleQueryStringQueryFlags {
100    fn deserialize<D>(deserializer: D) -> Result<SimpleQueryStringQueryFlags, D::Error>
101    where
102        D: Deserializer<'de>,
103    {
104        struct SimpleQueryStringQueryFlagsVisitor;
105
106        impl<'de> Visitor<'de> for SimpleQueryStringQueryFlagsVisitor {
107            type Value = SimpleQueryStringQueryFlags;
108
109            fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
110                formatter.write_str("a string representing a SimpleQueryStringQueryFlags variant")
111            }
112
113            fn visit_str<E>(self, value: &str) -> Result<SimpleQueryStringQueryFlags, E>
114            where
115                E: Error,
116            {
117                match value {
118                    "ALL" => Ok(SimpleQueryStringQueryFlags::All),
119                    "AND" => Ok(SimpleQueryStringQueryFlags::And),
120                    "ESCAPE" => Ok(SimpleQueryStringQueryFlags::Escape),
121                    "FUZZY" => Ok(SimpleQueryStringQueryFlags::Fuzzy),
122                    "NEAR" => Ok(SimpleQueryStringQueryFlags::Near),
123                    "NONE" => Ok(SimpleQueryStringQueryFlags::None),
124                    "NOT" => Ok(SimpleQueryStringQueryFlags::Not),
125                    "OR" => Ok(SimpleQueryStringQueryFlags::Or),
126                    "PHRASE" => Ok(SimpleQueryStringQueryFlags::Phrase),
127                    "PRECEDENCE" => Ok(SimpleQueryStringQueryFlags::Precedence),
128                    "PREFIX" => Ok(SimpleQueryStringQueryFlags::Prefix),
129                    "SLOP" => Ok(SimpleQueryStringQueryFlags::Slop),
130                    "WHITESPACE" => Ok(SimpleQueryStringQueryFlags::Whitespace),
131                    _ => Err(E::invalid_value(Unexpected::Str(value), &self)),
132                }
133            }
134        }
135
136        deserializer.deserialize_str(SimpleQueryStringQueryFlagsVisitor)
137    }
138}