symbol.rs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. use std::fmt::{self, Display};
  2. use syn::{Ident, Path};
  3. #[derive(Copy, Clone)]
  4. pub struct Symbol(&'static str);
  5. // Protobuf
  6. pub const PB_ATTRS: Symbol = Symbol("pb");
  7. //#[pb(skip)]
  8. pub const SKIP: Symbol = Symbol("skip");
  9. //#[pb(index = "1")]
  10. pub const PB_INDEX: Symbol = Symbol("index");
  11. //#[pb(one_of)]
  12. pub const PB_ONE_OF: Symbol = Symbol("one_of");
  13. //#[pb(skip_pb_deserializing = "...")]
  14. pub const SKIP_PB_DESERIALIZING: Symbol = Symbol("skip_pb_deserializing");
  15. //#[pb(skip_pb_serializing)]
  16. pub const SKIP_PB_SERIALIZING: Symbol = Symbol("skip_pb_serializing");
  17. //#[pb(serialize_pb_with = "...")]
  18. pub const SERIALIZE_PB_WITH: Symbol = Symbol("serialize_pb_with");
  19. //#[pb(deserialize_pb_with = "...")]
  20. pub const DESERIALIZE_PB_WITH: Symbol = Symbol("deserialize_pb_with");
  21. //#[pb(struct="some struct")]
  22. pub const PB_STRUCT: Symbol = Symbol("struct");
  23. //#[pb(enum="some enum")]
  24. pub const PB_ENUM: Symbol = Symbol("enum");
  25. // Event
  26. pub const EVENT_INPUT: Symbol = Symbol("input");
  27. pub const EVENT_OUTPUT: Symbol = Symbol("output");
  28. pub const EVENT_IGNORE: Symbol = Symbol("ignore");
  29. pub const EVENT: Symbol = Symbol("event");
  30. pub const EVENT_ERR: Symbol = Symbol("event_err");
  31. // Node
  32. pub const NODE_ATTRS: Symbol = Symbol("node");
  33. pub const NODES_ATTRS: Symbol = Symbol("nodes");
  34. pub const NODE_TYPE: Symbol = Symbol("node_type");
  35. pub const NODE_INDEX: Symbol = Symbol("index");
  36. pub const RENAME_NODE: Symbol = Symbol("rename");
  37. pub const CHILD_NODE_NAME: Symbol = Symbol("child_name");
  38. pub const CHILD_NODE_INDEX: Symbol = Symbol("child_index");
  39. pub const SKIP_NODE_ATTRS: Symbol = Symbol("skip_node_attribute");
  40. pub const GET_NODE_VALUE_WITH: Symbol = Symbol("get_value_with");
  41. pub const SET_NODE_VALUE_WITH: Symbol = Symbol("set_value_with");
  42. pub const GET_VEC_ELEMENT_WITH: Symbol = Symbol("get_element_with");
  43. pub const GET_MUT_VEC_ELEMENT_WITH: Symbol = Symbol("get_mut_element_with");
  44. pub const WITH_CHILDREN: Symbol = Symbol("with_children");
  45. impl PartialEq<Symbol> for Ident {
  46. fn eq(&self, word: &Symbol) -> bool {
  47. self == word.0
  48. }
  49. }
  50. impl<'a> PartialEq<Symbol> for &'a Ident {
  51. fn eq(&self, word: &Symbol) -> bool {
  52. *self == word.0
  53. }
  54. }
  55. impl PartialEq<Symbol> for Path {
  56. fn eq(&self, word: &Symbol) -> bool {
  57. self.is_ident(word.0)
  58. }
  59. }
  60. impl<'a> PartialEq<Symbol> for &'a Path {
  61. fn eq(&self, word: &Symbol) -> bool {
  62. self.is_ident(word.0)
  63. }
  64. }
  65. impl Display for Symbol {
  66. fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
  67. formatter.write_str(self.0)
  68. }
  69. }