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 OTHER: Symbol = Symbol("other"); 23 pub const REMOTE: Symbol = Symbol("remote"); 24 pub const RENAME: Symbol = Symbol("rename"); 25 pub const RENAME_ALL: Symbol = Symbol("rename_all"); 26 pub const REPR: Symbol = Symbol("repr"); 27 pub const SERDE: Symbol = Symbol("serde"); 28 pub const SERIALIZE: Symbol = Symbol("serialize"); 29 pub const SERIALIZE_WITH: Symbol = Symbol("serialize_with"); 30 pub const SKIP: Symbol = Symbol("skip"); 31 pub const SKIP_DESERIALIZING: Symbol = Symbol("skip_deserializing"); 32 pub const SKIP_SERIALIZING: Symbol = Symbol("skip_serializing"); 33 pub const SKIP_SERIALIZING_IF: Symbol = Symbol("skip_serializing_if"); 34 pub const TAG: Symbol = Symbol("tag"); 35 pub const TRANSPARENT: Symbol = Symbol("transparent"); 36 pub const TRY_FROM: Symbol = Symbol("try_from"); 37 pub const UNTAGGED: Symbol = Symbol("untagged"); 38 pub const VARIANT_IDENTIFIER: Symbol = Symbol("variant_identifier"); 39 pub const WITH: Symbol = Symbol("with"); 40 41 impl PartialEq<Symbol> for Ident { eq(&self, word: &Symbol) -> bool42 fn eq(&self, word: &Symbol) -> bool { 43 self == word.0 44 } 45 } 46 47 impl<'a> PartialEq<Symbol> for &'a Ident { eq(&self, word: &Symbol) -> bool48 fn eq(&self, word: &Symbol) -> bool { 49 *self == word.0 50 } 51 } 52 53 impl PartialEq<Symbol> for Path { eq(&self, word: &Symbol) -> bool54 fn eq(&self, word: &Symbol) -> bool { 55 self.is_ident(word.0) 56 } 57 } 58 59 impl<'a> PartialEq<Symbol> for &'a Path { eq(&self, word: &Symbol) -> bool60 fn eq(&self, word: &Symbol) -> bool { 61 self.is_ident(word.0) 62 } 63 } 64 65 impl Display for Symbol { fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result66 fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 67 formatter.write_str(self.0) 68 } 69 } 70