impls_index/impls_index/
func.rs

1/// Internal namespace.
2mod private
3{
4
5  ///
6  /// Get name of a function.
7  ///
8
9  #[ macro_export ]
10  macro_rules! fn_name
11  {
12
13    (
14      fn $Name : ident
15      $( $Rest : tt )*
16    )
17    =>
18    {
19      $Name
20    };
21
22    (
23      $First : tt
24      $( $Rest : tt )*
25    )
26    =>
27    {
28      $crate::fn_name!( $( $Rest )* );
29    };
30
31  }
32
33  ///
34  /// Macro to rename function.
35  ///
36
37  #[ macro_export ]
38  macro_rules! fn_rename
39  {
40
41    (
42      @Prefix { $( $Prefix : tt )* }
43      @Name { $Name : ident }
44      @Postfix
45      {
46        fn $OldName : ident
47        $( $Postfix : tt )*
48      }
49    )
50    =>
51    {
52      $( $Prefix )*
53      fn $Name
54      $( $Postfix )*
55    };
56
57    (
58      @Prefix { $( $Prefix : tt )* }
59      @Name { $Name : ident }
60      @Postfix
61      {
62        $First : tt
63        $( $Postfix : tt )*
64      }
65    )
66    =>
67    {
68      $crate::fn_rename!
69      {
70        @Prefix { $( $Prefix )* }
71        @Name { $Name }
72        @Postfix { $( $Postfix )* }
73      }
74    };
75
76    (
77      @Name { $Name : ident }
78      @Fn { $( $Fn : tt )* }
79    )
80    =>
81    {
82      $crate::fn_rename!
83      {
84        @Prefix {}
85        @Name { $Name }
86        @Postfix { $( $Fn )* }
87      }
88    };
89
90  }
91
92  ///
93  /// Split functions.
94  ///
95
96  #[ macro_export ]
97  macro_rules! fns
98  {
99
100    (
101      @Callback { $Callback : path }
102      @Rest
103      {
104        $( #[ $Meta : meta ] )*
105        $Vis : vis
106        fn $Name : ident
107        $( < $( $ParamName : ident $( : $ParamType : path )? ),* $(,)? > )?
108        ( $( $In : tt )* )
109        $( -> $Out : ty )?
110        $( where $( $WhereParamName : ident $( : $WhereParamType : path )? ),*  $(,)? )?
111        $Block : block
112
113        $( $Rest : tt )*
114      }
115    )
116    =>
117    {
118      $Callback!
119      {
120        $( #[ $Meta ] )*
121        $Vis
122        fn $Name
123        $( < $( $ParamName $( : $ParamType )? ),* > )?
124        ( $( $In )* )
125        $( -> $Out )?
126        $( where $( $WhereParamName $( : $WhereParamType )? ),* )?
127        $Block
128      }
129      $crate::fns!
130      {
131        @Callback { $Callback }
132        @Rest
133        {
134          $( $Rest )*
135        }
136      }
137    };
138
139    (
140      @Callback { $Callback : path }
141      @Rest {}
142    )
143    =>
144    {
145    };
146
147    (
148      @Callback { $Callback : path }
149      @Rest { $( $Rest : tt )* }
150    )
151    =>
152    {
153      compile_error!( concat!( "= Cant parse function\n", stringify!( $( $Rest )* ) ) );
154    };
155
156    (
157      @Callback { $Callback : path }
158      @Fns { $( $Fns : tt )* }
159    )
160    =>
161    {
162      $crate::fns!
163      {
164        @Callback { $Callback }
165        // @Current {}
166        @Rest { $( $Fns )* }
167      }
168    };
169
170  }
171
172  ///
173  /// Split functions.
174  ///
175
176  #[ macro_export ]
177  macro_rules! fns2
178  {
179
180    (
181      @Callback { $Callback : path }
182      @Rest
183      {
184        $( $Item : item )*
185      }
186    )
187    =>
188    {
189      $(
190        $Callback!
191        {
192          $Item
193        }
194      )*
195    };
196
197    (
198      @Callback { $Callback : path }
199      @Rest {}
200    )
201    =>
202    {
203    };
204
205    (
206      @Callback { $Callback : path }
207      @Rest { $( $Rest : tt )* }
208    )
209    =>
210    {
211      compile_error!( concat!( "= Cant parse function\n", stringify!( $( $Rest )* ) ) );
212    };
213
214    (
215      @Callback { $Callback : path }
216      @Fns { $( $Fns : tt )* }
217    )
218    =>
219    {
220      $crate::fns2!
221      {
222        @Callback { $Callback }
223        @Rest { $( $Fns )* }
224      }
225    };
226
227  }
228
229  pub use fn_rename;
230  pub use fn_name;
231  pub use fns;
232  pub use fns2;
233}
234
235/// Exposed namespace of the module.
236#[ allow( unused_imports ) ]
237pub mod exposed
238{
239  use super::*;
240  #[ doc( inline ) ]
241  pub use prelude::*;
242}
243
244/// Prelude to use essentials: `use my_module::prelude::*`.
245#[ allow( unused_imports ) ]
246pub mod prelude
247{
248  use super::*;
249  #[ doc( inline ) ]
250  #[ allow( unused_imports ) ]
251  pub use private::fn_rename;
252  #[ doc( inline ) ]
253  #[ allow( unused_imports ) ]
254  pub use private::fn_name;
255  #[ doc( inline ) ]
256  #[ allow( unused_imports ) ]
257  pub use private::fns;
258  #[ doc( inline ) ]
259  #[ allow( unused_imports ) ]
260  pub use private::fns2;
261  // pub use private::ignore_macro;
262}