1 use std::fmt::{self, Display};
2 use syn::{Ident, Path};
3 
4 #[derive(Copy, Clone)]
5 pub struct Symbol(&'static str);
6 
7 pub const ALIAS: Symbol = Symbol("alias");
8 pub const BORROW: Symbol = Symbol("borrow");
9 pub const BOUND: Symbol = Symbol("bound");
10 pub const CONTENT: Symbol = Symbol("content");
11 pub const CRATE: Symbol = Symbol("crate");
12 pub const DEFAULT: Symbol = Symbol("default");
13 pub const DENY_UNKNOWN_FIELDS: Symbol = Symbol("deny_unknown_fields");
14 pub const DESERIALIZE: Symbol = Symbol("deserialize");
15 pub const DESERIALIZE_WITH: Symbol = Symbol("deserialize_with");
16 pub const EXPECTING: Symbol = Symbol("expecting");
17 pub const FIELD_IDENTIFIER: Symbol = Symbol("field_identifier");
18 pub const FLATTEN: Symbol = Symbol("flatten");
19 pub const FROM: Symbol = Symbol("from");
20 pub const GETTER: Symbol = Symbol("getter");
21 pub const INTO: Symbol = Symbol("into");
22 pub const NON_EXHAUSTIVE: Symbol = Symbol("non_exhaustive");
23 pub const OTHER: Symbol = Symbol("other");
24 pub const REMOTE: Symbol = Symbol("remote");
25 pub const RENAME: Symbol = Symbol("rename");
26 pub const RENAME_ALL: Symbol = Symbol("rename_all");
27 pub const RENAME_ALL_FIELDS: Symbol = Symbol("rename_all_fields");
28 pub const REPR: Symbol = Symbol("repr");
29 pub const SERDE: Symbol = Symbol("serde");
30 pub const SERIALIZE: Symbol = Symbol("serialize");
31 pub const SERIALIZE_WITH: Symbol = Symbol("serialize_with");
32 pub const SKIP: Symbol = Symbol("skip");
33 pub const SKIP_DESERIALIZING: Symbol = Symbol("skip_deserializing");
34 pub const SKIP_SERIALIZING: Symbol = Symbol("skip_serializing");
35 pub const SKIP_SERIALIZING_IF: Symbol = Symbol("skip_serializing_if");
36 pub const TAG: Symbol = Symbol("tag");
37 pub const TRANSPARENT: Symbol = Symbol("transparent");
38 pub const TRY_FROM: Symbol = Symbol("try_from");
39 pub const UNTAGGED: Symbol = Symbol("untagged");
40 pub const VARIANT_IDENTIFIER: Symbol = Symbol("variant_identifier");
41 pub const WITH: Symbol = Symbol("with");
42 
43 impl PartialEq<Symbol> for Ident {
eq(&self, word: &Symbol) -> bool44     fn eq(&self, word: &Symbol) -> bool {
45         self == word.0
46     }
47 }
48 
49 impl<'a> PartialEq<Symbol> for &'a Ident {
eq(&self, word: &Symbol) -> bool50     fn eq(&self, word: &Symbol) -> bool {
51         *self == word.0
52     }
53 }
54 
55 impl PartialEq<Symbol> for Path {
eq(&self, word: &Symbol) -> bool56     fn eq(&self, word: &Symbol) -> bool {
57         self.is_ident(word.0)
58     }
59 }
60 
61 impl<'a> PartialEq<Symbol> for &'a Path {
eq(&self, word: &Symbol) -> bool62     fn eq(&self, word: &Symbol) -> bool {
63         self.is_ident(word.0)
64     }
65 }
66 
67 impl Display for Symbol {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result68     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
69         formatter.write_str(self.0)
70     }
71 }
72