#[derive(
Debug,
Clone,
PartialEq,
Eq,
PartialOrd,
Ord,
Hash,
derive_more::AsRef,
derive_more::Display,
derive_more::From,
derive_more::FromStr,
derive_more::Into,
serde::Serialize,
serde::Deserialize,
)]
#[cfg_attr(feature = "sea-orm", derive(sea_orm::DeriveValueType))]
pub struct Keyword(String);
impl From<&str> for Keyword {
fn from(value: &str) -> Self {
Self(value.into())
}
}
impl Keyword {
pub fn as_str(&self) -> &str {
self.0.as_str()
}
}
#[cfg(feature = "sea-orm")]
mod sea_orm_impls {
use sea_orm::{ActiveValue, IntoActiveValue};
use super::Keyword;
impl IntoActiveValue<Keyword> for Keyword {
fn into_active_value(self) -> ActiveValue<Keyword> {
ActiveValue::Set(self)
}
}
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use super::Keyword;
#[test]
fn from_str() {
assert_eq!(
Keyword("finanzen".to_string()),
"finanzen"
.parse()
.expect("value must be a parseable Keyword")
);
}
}
#[cfg(test)]
mod serde_tests {
use pretty_assertions::assert_eq;
use serde_json::json;
use super::Keyword;
#[test]
fn serialize() {
assert_eq!(json!(Keyword("finanzen".to_string())), json!("finanzen"));
}
#[test]
fn deserialize_good() {
let deserialized: Keyword = serde_json::from_value(json!("finanzen"))
.expect("value must be deserializable as Keyword");
assert_eq!(deserialized, Keyword::from("finanzen"));
}
#[test]
fn deserialize_bad() {
assert!(serde_json::from_value::<Keyword>(json!([])).is_err());
assert!(serde_json::from_value::<Keyword>(json!({})).is_err());
assert!(serde_json::from_value::<Keyword>(json!(true)).is_err());
assert!(serde_json::from_value::<Keyword>(json!(123)).is_err());
}
}