diff options
Diffstat (limited to 'src/charset.rs')
-rw-r--r-- | src/charset.rs | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/charset.rs b/src/charset.rs index a79eddb..71e1e84 100644 --- a/src/charset.rs +++ b/src/charset.rs @@ -2,7 +2,8 @@ use std::cmp::Ordering; use serde::{Deserialize, Serialize}; -#[derive(Debug, Eq, PartialEq, Hash, Clone, Serialize, Deserialize, Default)] +#[derive(Debug, Eq, PartialEq, Hash, Clone, Default, Serialize, Deserialize)] +#[serde(into = "String", from = "CharsetSerializedEnum")] pub struct Charset(pub Vec<char>); impl Charset { @@ -153,6 +154,28 @@ impl Charset { } } +impl Into<String> for Charset { + fn into(self) -> String { + self.to_string() + } +} + +#[derive(Deserialize)] +#[serde(untagged)] +enum CharsetSerializedEnum { + Array(Vec<char>), + Str(String), +} + +impl From<CharsetSerializedEnum> for Charset { + fn from(s: CharsetSerializedEnum) -> Charset { + match s { + CharsetSerializedEnum::Array(a) => Charset::from_iter(a.into_iter()), + CharsetSerializedEnum::Str(s) => Charset::new(&s), + } + } +} + #[cfg(test)] mod test { use super::*; |