From 0b3387f8b9295a7a608c273f70502d5e69a71df6 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Wed, 1 Feb 2017 14:34:51 -0800 Subject: [PATCH] Minor EDN cleanup. (#217) r=jsantell * to_reverse -> to_reversed. * Add PlainSymbol::plain_name for examining $x and ?y. * Fix comment. --- edn/src/symbols.rs | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/edn/src/symbols.rs b/edn/src/symbols.rs index 9cb105fd..0b2550c4 100644 --- a/edn/src/symbols.rs +++ b/edn/src/symbols.rs @@ -77,6 +77,32 @@ impl PlainSymbol { PlainSymbol(n) } + + /// Return the name of the symbol without any leading '?' or '$'. + /// + /// ```rust + /// # use edn::symbols::PlainSymbol; + /// assert_eq!("foo", PlainSymbol::new("?foo").plain_name()); + /// assert_eq!("foo", PlainSymbol::new("$foo").plain_name()); + /// assert_eq!("!foo", PlainSymbol::new("!foo").plain_name()); + /// ``` + pub fn plain_name(&self) -> &str { + if self.is_src_symbol() || self.is_var_symbol() { + &self.0[1..] + } else { + &self.0 + } + } + + #[inline] + pub fn is_var_symbol(&self) -> bool { + self.0.starts_with('?') + } + + #[inline] + pub fn is_src_symbol(&self) -> bool { + self.0.starts_with('$') + } } impl NamespacedSymbol { @@ -147,7 +173,7 @@ impl NamespacedKeyword { } /// Whether this `NamespacedKeyword` should be interpreted in forward order. - /// See `symbols::NamespacedKeyword::is_backwards`. + /// See `symbols::NamespacedKeyword::is_backward`. /// /// # Examples /// @@ -172,11 +198,11 @@ impl NamespacedKeyword { /// assert!(!nsk.is_backward()); /// assert_eq!(":foo/bar", nsk.to_string()); /// - /// let reversed = nsk.to_reverse(); + /// let reversed = nsk.to_reversed(); /// assert!(reversed.is_backward()); /// assert_eq!(":foo/_bar", reversed.to_string()); /// ``` - pub fn to_reverse(&self) -> NamespacedKeyword { + pub fn to_reversed(&self) -> NamespacedKeyword { let name = if self.is_backward() { self.name[1..].to_string() } else { @@ -244,8 +270,8 @@ impl Display for NamespacedKeyword { /// ```rust /// # use edn::symbols::NamespacedKeyword; /// assert_eq!(":bar/baz", NamespacedKeyword::new("bar", "baz").to_string()); - /// assert_eq!(":bar/_baz", NamespacedKeyword::new("bar", "baz").to_reverse().to_string()); - /// assert_eq!(":bar/baz", NamespacedKeyword::new("bar", "baz").to_reverse().to_reverse().to_string()); + /// assert_eq!(":bar/_baz", NamespacedKeyword::new("bar", "baz").to_reversed().to_string()); + /// assert_eq!(":bar/baz", NamespacedKeyword::new("bar", "baz").to_reversed().to_reversed().to_string()); /// ``` fn fmt(&self, f: &mut Formatter) -> ::std::fmt::Result { write!(f, ":{}/{}", self.namespace, self.name)