lib.rs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #![doc = include_str!("../README.md")]
  2. #![doc(html_logo_url = "https://avatars.githubusercontent.com/u/79236386")]
  3. #![doc(html_favicon_url = "https://avatars.githubusercontent.com/u/79236386")]
  4. use proc_macro::TokenStream;
  5. use proc_macro2::TokenStream as TokenStream2;
  6. use quote::quote;
  7. #[proc_macro]
  8. pub fn server_only(input: TokenStream) -> TokenStream {
  9. if cfg!(any(feature = "ssr", feature = "liveview")) {
  10. let input = TokenStream2::from(input);
  11. quote! {
  12. #input
  13. }
  14. } else {
  15. quote! {
  16. {}
  17. }
  18. }
  19. .into()
  20. }
  21. #[proc_macro]
  22. pub fn client(input: TokenStream) -> TokenStream {
  23. if cfg!(any(feature = "desktop", feature = "web")) {
  24. let input = TokenStream2::from(input);
  25. quote! {
  26. #input
  27. }
  28. } else {
  29. quote! {
  30. {}
  31. }
  32. }
  33. .into()
  34. }
  35. #[proc_macro]
  36. pub fn web(input: TokenStream) -> TokenStream {
  37. if cfg!(feature = "web") {
  38. let input = TokenStream2::from(input);
  39. quote! {
  40. #input
  41. }
  42. } else {
  43. quote! {
  44. {}
  45. }
  46. }
  47. .into()
  48. }
  49. #[proc_macro]
  50. pub fn desktop(input: TokenStream) -> TokenStream {
  51. if cfg!(feature = "desktop") {
  52. let input = TokenStream2::from(input);
  53. quote! {
  54. #input
  55. }
  56. } else {
  57. quote! {
  58. {}
  59. }
  60. }
  61. .into()
  62. }
  63. #[proc_macro]
  64. pub fn mobile(input: TokenStream) -> TokenStream {
  65. if cfg!(feature = "mobile") {
  66. let input = TokenStream2::from(input);
  67. quote! {
  68. #input
  69. }
  70. } else {
  71. quote! {
  72. {}
  73. }
  74. }
  75. .into()
  76. }
  77. #[proc_macro]
  78. pub fn fullstack(input: TokenStream) -> TokenStream {
  79. if cfg!(feature = "fullstack") {
  80. let input = TokenStream2::from(input);
  81. quote! {
  82. #input
  83. }
  84. } else {
  85. quote! {
  86. {}
  87. }
  88. }
  89. .into()
  90. }
  91. #[proc_macro]
  92. pub fn static_generation(input: TokenStream) -> TokenStream {
  93. if cfg!(feature = "static-generation") {
  94. let input = TokenStream2::from(input);
  95. quote! {
  96. #input
  97. }
  98. } else {
  99. quote! {
  100. {}
  101. }
  102. }
  103. .into()
  104. }
  105. #[proc_macro]
  106. pub fn ssr(input: TokenStream) -> TokenStream {
  107. if cfg!(feature = "ssr") {
  108. let input = TokenStream2::from(input);
  109. quote! {
  110. #input
  111. }
  112. } else {
  113. quote! {
  114. {}
  115. }
  116. }
  117. .into()
  118. }
  119. #[proc_macro]
  120. pub fn liveview(input: TokenStream) -> TokenStream {
  121. if cfg!(feature = "liveview") {
  122. let input = TokenStream2::from(input);
  123. quote! {
  124. #input
  125. }
  126. } else {
  127. quote! {
  128. {}
  129. }
  130. }
  131. .into()
  132. }