summaryrefslogtreecommitdiffstats
path: root/src/priority.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-04-02 14:02:52 +0200
committerMatthias Beyer <mail@beyermatthias.de>2016-04-02 17:33:20 +0200
commitf9edb545e213a1dd21649500a79242529b3abedf (patch)
treee1687e777aaec1526e4b1319361184156e32ab59 /src/priority.rs
parent8d3f40dad641af23cc08edefb25ae4f93b1dd535 (diff)
Impl De/Serialize for Priority
Diffstat (limited to 'src/priority.rs')
-rw-r--r--src/priority.rs61
1 files changed, 43 insertions, 18 deletions
diff --git a/src/priority.rs b/src/priority.rs
index fdc7833..427a17d 100644
--- a/src/priority.rs
+++ b/src/priority.rs
@@ -1,32 +1,57 @@
+use serde::Serialize;
+use serde::Serializer;
+use serde::Deserialize;
+use serde::Deserializer;
+use serde::de::Error;
+use serde::de::Visitor;
+
#[derive(Debug, Clone, PartialEq)]
pub enum TaskPriority {
- NoPrio,
Low,
Medium,
High,
}
-impl<'a> From<&'a str> for TaskPriority {
- fn from(s: &str) -> TaskPriority {
- match s {
- "L" => TaskPriority::Low,
- "M" => TaskPriority::Medium,
- "H" => TaskPriority::High,
- _ => TaskPriority::NoPrio,
- }
+impl Serialize for TaskPriority {
+
+ fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
+ where S: Serializer
+ {
+ serializer.serialize_str(
+ match self {
+ TaskPriority::Low => "L",
+ TaskPriority::Medium => "M",
+ TaskPriority::High => "H",
+ }
+ )
}
+
}
-impl Into<String> for TaskPriority {
+impl Deserialize for TaskPriority {
- fn into(self) -> String {
- String::from(match self {
- TaskPriority::Low => "L",
- TaskPriority::Medium => "M",
- TaskPriority::High => "H",
- TaskPriority::NoPrio => "",
- })
- }
+ fn deserialize<D>(deserializer: &mut D) -> Result<TaskPriority, Error>
+ where D: Deserializer
+ {
+ struct TaskPriorityVisitor;
+ impl Visitor for TaskPriorityVisitor {
+ type Value = TaskPriority;
+
+ fn visit_str<E>(&mut self, value: &str) -> Result<TaskPriority, E>
+ where E: Error
+ {
+ match value {
+ "L" => Ok(TaskPriority::Low),
+ "M" => Ok(TaskPriority::Medium),
+ "H" => Ok(TaskPriority::High),
+ _ => Err(Error::custom("expected one of 'L', 'M', 'H'")),
+ }
+ }
+ }
+
+ deserializer.deserialize(TaskPriorityVisitor)
+ }
}
+