Struct edn::symbols::Keyword
[−]
[src]
pub struct Keyword(_);
A keyword is a symbol, optionally with a namespace, that prints with a leading colon. This concept is imported from Clojure, as it features in EDN and the query syntax that we use.
Clojure's constraints are looser than ours, allowing empty namespaces or names:
user=> (keyword "" "")
:/
user=> (keyword "foo" "")
:foo/
user=> (keyword "" "bar")
:/bar
We think that's nonsense, so we only allow keywords like :bar
and :foo/bar
,
with both namespace and main parts containing no whitespace and no colon or slash:
let bar = Keyword::plain("bar"); // :bar let foo_bar = Keyword::namespaced("foo", "bar"); // :foo/bar assert_eq!("bar", bar.name()); assert_eq!(None, bar.namespace()); assert_eq!("bar", foo_bar.name()); assert_eq!(Some("foo"), foo_bar.namespace());
If you're not sure whether your input is well-formed, you should use a
parser or a reader function first to validate. TODO: implement read
.
Callers are expected to follow these rules: http://www.clojure.org/reference/reader#_symbols
Future: fast equality (interning?) for keywords.
Methods
impl Keyword
[src]
impl Keyword
[src]
pub fn namespaced<N, T>(namespace: N, name: T) -> Self where
N: AsRef<str>,
T: AsRef<str>,
[src]
N: AsRef<str>,
T: AsRef<str>,
Creates a new Keyword
.
Examples
let keyword = Keyword::namespaced("foo", "bar"); assert_eq!(keyword.to_string(), ":foo/bar");
See also the kw!
macro in the main mentat
crate.
pub fn name(&self) -> &str
[src]
pub fn namespace(&self) -> Option<&str>
[src]
pub fn components<'a>(&'a self) -> (&'a str, &'a str)
[src]
pub fn is_backward(&self) -> bool
[src]
Whether this Keyword
should be interpreted in reverse order. For example,
the two following snippets are identical:
[?y :person/friend ?x]
[?x :person/hired ?y]
[?y :person/friend ?x]
[?y :person/_hired ?x]
Examples
assert!(!Keyword::namespaced("foo", "bar").is_backward()); assert!(Keyword::namespaced("foo", "_bar").is_backward());
pub fn is_forward(&self) -> bool
[src]
Whether this Keyword
should be interpreted in forward order.
See symbols::Keyword::is_backward
.
Examples
assert!(Keyword::namespaced("foo", "bar").is_forward()); assert!(!Keyword::namespaced("foo", "_bar").is_forward());
pub fn is_namespaced(&self) -> bool
[src]
pub fn to_reversed(&self) -> Keyword
[src]
Returns a Keyword
with the same namespace and a
'backward' name. See symbols::Keyword::is_backward
.
Returns a forward name if passed a reversed keyword; i.e., this function is its own inverse.
Examples
let nsk = Keyword::namespaced("foo", "bar"); assert!(!nsk.is_backward()); assert_eq!(":foo/bar", nsk.to_string()); let reversed = nsk.to_reversed(); assert!(reversed.is_backward()); assert_eq!(":foo/_bar", reversed.to_string());
pub fn unreversed(&self) -> Option<Keyword>
[src]
If this Keyword
is 'backward' (see symbols::Keyword::is_backward
),
return Some('forward name')
; otherwise, return None
.
Examples
let nsk = Keyword::namespaced("foo", "bar"); assert_eq!(None, nsk.unreversed()); let reversed = nsk.to_reversed(); assert_eq!(Some(nsk), reversed.unreversed());
Trait Implementations
impl From<Keyword> for EntidOrIdent
[src]
impl From<Keyword> for PatternNonValuePlace
[src]
impl From<Keyword> for PatternValuePlace
[src]
impl Clone for Keyword
[src]
fn clone(&self) -> Keyword
[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl Debug for Keyword
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more
impl Eq for Keyword
[src]
impl Hash for Keyword
[src]
fn hash<__H: Hasher>(&self, __arg_0: &mut __H)
[src]
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl Ord for Keyword
[src]
fn cmp(&self, __arg_0: &Keyword) -> Ordering
[src]
This method returns an Ordering
between self
and other
. Read more
fn max(self, other: Self) -> Self
1.21.0[src]
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self
1.21.0[src]
Compares and returns the minimum of two values. Read more
impl PartialOrd for Keyword
[src]
fn partial_cmp(&self, __arg_0: &Keyword) -> Option<Ordering>
[src]
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, __arg_0: &Keyword) -> bool
[src]
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, __arg_0: &Keyword) -> bool
[src]
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, __arg_0: &Keyword) -> bool
[src]
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, __arg_0: &Keyword) -> bool
[src]
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl PartialEq for Keyword
[src]
fn eq(&self, __arg_0: &Keyword) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &Keyword) -> bool
[src]
This method tests for !=
.
impl Display for Keyword
[src]
fn fmt(&self, f: &mut Formatter) -> Result
[src]
Print the keyword in EDN format.
Examples
assert_eq!(":baz", Keyword::plain("baz").to_string()); assert_eq!(":bar/baz", Keyword::namespaced("bar", "baz").to_string()); assert_eq!(":bar/_baz", Keyword::namespaced("bar", "baz").to_reversed().to_string()); assert_eq!(":bar/baz", Keyword::namespaced("bar", "baz").to_reversed().to_reversed().to_string());