use std::fmt;
use serde::{
de::{Error, Unexpected, Visitor},
ser::{Serialize, Serializer},
Deserialize, Deserializer,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum SimpleQueryStringQueryFlags {
All,
And,
Escape,
Fuzzy,
Near,
None,
Not,
Or,
Phrase,
Precedence,
Prefix,
Slop,
Whitespace,
}
impl From<SimpleQueryStringQueryFlags> for &'static str {
fn from(value: SimpleQueryStringQueryFlags) -> Self {
match value {
SimpleQueryStringQueryFlags::All => "ALL",
SimpleQueryStringQueryFlags::And => "AND",
SimpleQueryStringQueryFlags::Escape => "ESCAPE",
SimpleQueryStringQueryFlags::Fuzzy => "FUZZY",
SimpleQueryStringQueryFlags::Near => "NEAR",
SimpleQueryStringQueryFlags::None => "NONE",
SimpleQueryStringQueryFlags::Not => "NOT",
SimpleQueryStringQueryFlags::Or => "OR",
SimpleQueryStringQueryFlags::Phrase => "PHRASE",
SimpleQueryStringQueryFlags::Precedence => "PRECEDENCE",
SimpleQueryStringQueryFlags::Prefix => "PREFIX",
SimpleQueryStringQueryFlags::Slop => "SLOP",
SimpleQueryStringQueryFlags::Whitespace => "WHITESPACE",
}
}
}
impl From<SimpleQueryStringQueryFlags> for String {
fn from(value: SimpleQueryStringQueryFlags) -> Self {
<&'static str>::from(value).to_string()
}
}
impl fmt::Display for SimpleQueryStringQueryFlags {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
<&'static str>::from(*self).fmt(f)
}
}
impl Serialize for SimpleQueryStringQueryFlags {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
<&'static str>::from(*self).serialize(serializer)
}
}
impl<'de> Deserialize<'de> for SimpleQueryStringQueryFlags {
fn deserialize<D>(deserializer: D) -> Result<SimpleQueryStringQueryFlags, D::Error>
where
D: Deserializer<'de>,
{
struct SimpleQueryStringQueryFlagsVisitor;
impl<'de> Visitor<'de> for SimpleQueryStringQueryFlagsVisitor {
type Value = SimpleQueryStringQueryFlags;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("a string representing a SimpleQueryStringQueryFlags variant")
}
fn visit_str<E>(self, value: &str) -> Result<SimpleQueryStringQueryFlags, E>
where
E: Error,
{
match value {
"ALL" => Ok(SimpleQueryStringQueryFlags::All),
"AND" => Ok(SimpleQueryStringQueryFlags::And),
"ESCAPE" => Ok(SimpleQueryStringQueryFlags::Escape),
"FUZZY" => Ok(SimpleQueryStringQueryFlags::Fuzzy),
"NEAR" => Ok(SimpleQueryStringQueryFlags::Near),
"NONE" => Ok(SimpleQueryStringQueryFlags::None),
"NOT" => Ok(SimpleQueryStringQueryFlags::Not),
"OR" => Ok(SimpleQueryStringQueryFlags::Or),
"PHRASE" => Ok(SimpleQueryStringQueryFlags::Phrase),
"PRECEDENCE" => Ok(SimpleQueryStringQueryFlags::Precedence),
"PREFIX" => Ok(SimpleQueryStringQueryFlags::Prefix),
"SLOP" => Ok(SimpleQueryStringQueryFlags::Slop),
"WHITESPACE" => Ok(SimpleQueryStringQueryFlags::Whitespace),
_ => Err(E::invalid_value(Unexpected::Str(value), &self)),
}
}
}
deserializer.deserialize_str(SimpleQueryStringQueryFlagsVisitor)
}
}