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]

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.

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());

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());

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());

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 PatternNonValuePlace
[src]

Performs the conversion.

impl From<Keyword> for PatternValuePlace
[src]

Performs the conversion.

impl Clone for Keyword
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl Debug for Keyword
[src]

Formats the value using the given formatter. Read more

impl Eq for Keyword
[src]

impl Hash for Keyword
[src]

Feeds this value into the given [Hasher]. Read more

Feeds a slice of this type into the given [Hasher]. Read more

impl Ord for Keyword
[src]

This method returns an Ordering between self and other. Read more

Compares and returns the maximum of two values. Read more

Compares and returns the minimum of two values. Read more

impl PartialOrd for Keyword
[src]

This method returns an ordering between self and other values if one exists. Read more

This method tests less than (for self and other) and is used by the < operator. Read more

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

This method tests greater than (for self and other) and is used by the > operator. Read more

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]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl Display for Keyword
[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());

Auto Trait Implementations

impl Send for Keyword

impl Sync for Keyword