macros.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #[cfg(feature = "log")]
  2. #[macro_use]
  3. mod log {
  4. macro_rules! net_log {
  5. (trace, $($arg:expr),*) => { trace!($($arg),*); };
  6. (debug, $($arg:expr),*) => { debug!($($arg),*); };
  7. }
  8. }
  9. #[cfg(not(feature = "log"))]
  10. #[macro_use]
  11. mod log {
  12. macro_rules! net_log {
  13. ($level:ident, $($arg:expr),*) => { $( let _ = $arg; )* }
  14. }
  15. }
  16. macro_rules! net_trace {
  17. ($($arg:expr),*) => (net_log!(trace, $($arg),*));
  18. }
  19. macro_rules! net_debug {
  20. ($($arg:expr),*) => (net_log!(debug, $($arg),*));
  21. }
  22. macro_rules! enum_with_unknown {
  23. (
  24. $( #[$enum_attr:meta] )*
  25. pub enum $name:ident($ty:ty) {
  26. $( $variant:ident = $value:expr ),+ $(,)*
  27. }
  28. ) => {
  29. enum_with_unknown! {
  30. $( #[$enum_attr] )*
  31. pub doc enum $name($ty) {
  32. $( #[doc(shown)] $variant = $value ),+
  33. }
  34. }
  35. };
  36. (
  37. $( #[$enum_attr:meta] )*
  38. pub doc enum $name:ident($ty:ty) {
  39. $(
  40. $( #[$variant_attr:meta] )+
  41. $variant:ident = $value:expr $(,)*
  42. ),+
  43. }
  44. ) => {
  45. #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
  46. $( #[$enum_attr] )*
  47. pub enum $name {
  48. $(
  49. $( #[$variant_attr] )*
  50. $variant
  51. ),*,
  52. Unknown($ty)
  53. }
  54. impl ::core::convert::From<$ty> for $name {
  55. fn from(value: $ty) -> Self {
  56. match value {
  57. $( $value => $name::$variant ),*,
  58. other => $name::Unknown(other)
  59. }
  60. }
  61. }
  62. impl ::core::convert::From<$name> for $ty {
  63. fn from(value: $name) -> Self {
  64. match value {
  65. $( $name::$variant => $value ),*,
  66. $name::Unknown(other) => other
  67. }
  68. }
  69. }
  70. }
  71. }