macros.rs 2.1 KB

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