summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMalte Brandy <malte.brandy@maralorn.de>2018-04-19 15:05:40 +0200
committerGitHub <noreply@github.com>2018-04-19 15:05:40 +0200
commit4bb15f6ce0932d3c0dc244ec28b0444cdfd72d48 (patch)
tree2d83bd066496f587789cd334a52167ecb6b68fd1
parentab6251088621cd9af021fb2cbc48e2f1a95e0b13 (diff)
parentf9b5daad44aee09906e45f2ebe0e5b7b327ccd6c (diff)
Merge pull request #63 from maralorn/simpler-uda
Simplify the types for UDAs
-rw-r--r--src/task.rs6
-rw-r--r--src/uda.rs83
2 files changed, 9 insertions, 80 deletions
diff --git a/src/task.rs b/src/task.rs
index 96ce165..6e6c6c5 100644
--- a/src/task.rs
+++ b/src/task.rs
@@ -811,17 +811,17 @@ mod test {
assert!(task.is_ok());
let task: Task = task.unwrap();
- let str_uda = task.uda().get(&"test_str_uda".into());
+ let str_uda = task.uda().get(&"test_str_uda".to_owned());
assert!(str_uda.is_some());
let str_uda = str_uda.unwrap();
assert_eq!(str_uda, &UDAValue::Str("test_str_uda_value".to_owned()));
- let float_uda = task.uda().get(&"test_float_uda".into());
+ let float_uda = task.uda().get(&"test_float_uda".to_owned());
assert!(float_uda.is_some());
let float_uda = float_uda.unwrap();
assert_eq!(float_uda, &UDAValue::F64(-17.1234));
- let int_uda = task.uda().get(&"test_int_uda".into());
+ let int_uda = task.uda().get(&"test_int_uda".to_owned());
assert!(int_uda.is_some());
let int_uda = int_uda.unwrap();
assert_eq!(int_uda, &UDAValue::U64(1234));
diff --git a/src/uda.rs b/src/uda.rs
index d97ebfb..8f3f2ba 100644
--- a/src/uda.rs
+++ b/src/uda.rs
@@ -1,7 +1,5 @@
//! Module containing the types for User Defined Attributes (UDA)
-use std::ops::{Deref, DerefMut};
-use std::default::Default;
use std::collections::BTreeMap;
use std::result::Result as RResult;
use std::fmt;
@@ -13,40 +11,10 @@ use serde::Deserializer;
use serde::de::Visitor;
use serde::de;
-/// UDA Name
-#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
-pub struct UDAName(String);
+/// The name of a UDA is just a string.
+pub type UDAName = String;
-impl<'a> From<&'a str> for UDAName {
- fn from(s: &str) -> UDAName {
- UDAName(String::from(s))
- }
-}
-impl From<String> for UDAName {
- fn from(s: String) -> UDAName {
- UDAName(s)
- }
-}
-
-impl Serialize for UDAName {
- fn serialize<S>(&self, serializer: S) -> RResult<S::Ok, S::Error>
- where
- S: Serializer,
- {
- self.0.serialize(serializer)
- }
-}
-
-impl<'de> Deserialize<'de> for UDAName {
- fn deserialize<D>(deserializer: D) -> RResult<UDAName, D::Error>
- where
- D: Deserializer<'de>,
- {
- String::deserialize(deserializer).map(|s| UDAName(s))
- }
-}
-
-/// UDA Value
+/// A UDA can have different value types.
#[derive(Clone, Debug, PartialEq, PartialOrd)]
pub enum UDAValue {
/// UDA is a string
@@ -107,45 +75,6 @@ impl<'de> Deserialize<'de> for UDAValue {
}
}
-/// Wrapper type for BTreeMap<UDAName, UDAValue> so serde does not automatically implement the
-/// Deserialize trait on it.
-#[derive(Clone, Debug)]
-pub struct UDA(BTreeMap<UDAName, UDAValue>);
-
-impl Deref for UDA {
- type Target = BTreeMap<UDAName, UDAValue>;
-
- fn deref(&self) -> &BTreeMap<UDAName, UDAValue> {
- &self.0
- }
-}
-
-impl DerefMut for UDA {
- fn deref_mut(&mut self) -> &mut BTreeMap<UDAName, UDAValue> {
- &mut self.0
- }
-}
-
-impl Default for UDA {
- fn default() -> UDA {
- UDA(BTreeMap::new())
- }
-}
-
-impl Serialize for UDA {
- fn serialize<S>(&self, serializer: S) -> RResult<S::Ok, S::Error>
- where
- S: Serializer,
- {
- self.0.serialize(serializer)
- }
-}
-
-impl<'de> Deserialize<'de> for UDA {
- fn deserialize<D>(deserializer: D) -> RResult<UDA, D::Error>
- where
- D: Deserializer<'de>,
- {
- BTreeMap::deserialize(deserializer).map(|btm| UDA(btm))
- }
-}
+/// The UDA Type is just a BTreeMap<UDAName, UDAValue> in which all fields of a task are saved,
+/// which are not part of the taskwarrior standard. (This makes them user defined attributes.)
+pub type UDA = BTreeMap<UDAName, UDAValue>;