Struct mentat_transaction::query::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]

[src]

impl Keyword
[src]

[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.

[src]

[src]

[src]

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

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

[src]

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

[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 Hash for Keyword
[src]

[src]

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

1.3.0
[src]

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

impl PartialOrd<Keyword> for Keyword
[src]

[src]

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

[src]

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

[src]

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

[src]

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

[src]

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

impl From<Keyword> for PatternNonValuePlace
[src]

[src]

Performs the conversion.

impl From<Keyword> for EntidOrIdent
[src]

[src]

Performs the conversion.

impl From<Keyword> for PatternValuePlace
[src]

[src]

Performs the conversion.

impl Debug for Keyword
[src]

[src]

Formats the value using the given formatter. Read more

impl Clone for Keyword
[src]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl Serialize for Keyword
[src]

[src]

Serialize this value into the given Serde serializer. Read more

impl Ord for Keyword
[src]

[src]

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

1.21.0
[src]

Compares and returns the maximum of two values. Read more

1.21.0
[src]

Compares and returns the minimum of two values. Read more

impl Eq for Keyword
[src]

impl Display for Keyword
[src]

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

impl PartialEq<Keyword> for Keyword
[src]

[src]

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

[src]

This method tests for !=.

impl<'de> Deserialize<'de> for Keyword
[src]

[src]

Deserialize this value from the given Serde deserializer. Read more

impl From<Keyword> for TypedValue
[src]

[src]

Performs the conversion.