macros.rs 1.8 KB

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