use crate::error::Error;
use serde::{Deserialize, Deserializer, Serialize, de::Error as DeError};
use std::str::FromStr;
#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Serialize)]
pub struct Keyword(String);
impl Keyword {
pub fn as_str(&self) -> &str {
self.0.as_ref()
}
}
impl AsRef<str> for Keyword {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl<'de> Deserialize<'de> for Keyword {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
Self::from_str(&String::deserialize(deserializer)?)
.map_err(|e| D::Error::custom(format!("{e}")))
}
}
impl FromStr for Keyword {
type Err = Error;
fn from_str(keyword: &str) -> Result<Self, Error> {
Ok(Keyword(keyword.into()))
}
}