aboutsummaryrefslogtreecommitdiff
path: root/src/charset.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/charset.rs')
-rw-r--r--src/charset.rs25
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::*;