Skip to main content

spacetime_bindings_macro_input/
sym.rs

1/// A symbol known at compile-time against
2/// which identifiers and paths may be matched.
3pub struct Symbol(pub &'static str);
4
5#[macro_export]
6macro_rules! symbol {
7    ($ident:ident) => {
8        symbol!($ident, $ident);
9    };
10    ($const:ident, $ident:ident) => {
11        #[allow(non_upper_case_globals)]
12        #[doc = concat!("Matches `", stringify!($ident), "`.")]
13        pub const $const: Symbol = Symbol(stringify!($ident));
14    };
15}
16pub use symbol;
17
18symbol!(accessor);
19symbol!(at);
20symbol!(auto_inc);
21symbol!(btree);
22symbol!(column);
23symbol!(columns);
24symbol!(crate_, crate);
25symbol!(default);
26symbol!(direct);
27symbol!(event);
28symbol!(hash);
29symbol!(index);
30symbol!(name);
31symbol!(primary_key);
32symbol!(private);
33symbol!(public);
34symbol!(repr);
35symbol!(sats);
36symbol!(scheduled);
37symbol!(unique);
38
39impl PartialEq<Symbol> for syn::Ident {
40    fn eq(&self, sym: &Symbol) -> bool {
41        self == sym.0
42    }
43}
44impl PartialEq<Symbol> for &syn::Ident {
45    fn eq(&self, sym: &Symbol) -> bool {
46        *self == sym.0
47    }
48}
49impl PartialEq<Symbol> for syn::Path {
50    fn eq(&self, sym: &Symbol) -> bool {
51        self.is_ident(sym)
52    }
53}
54impl PartialEq<Symbol> for &syn::Path {
55    fn eq(&self, sym: &Symbol) -> bool {
56        self.is_ident(sym)
57    }
58}
59impl std::fmt::Display for Symbol {
60    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61        f.write_str(self.0)
62    }
63}
64impl std::borrow::Borrow<str> for Symbol {
65    fn borrow(&self) -> &str {
66        self.0
67    }
68}