1 // Copyright (c) 2023 Huawei Device Co., Ltd.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 //
6 //     http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.
13 
14 //! An example for `tuple_form!()`
15 
main()16 fn main() {
17     #[derive(PartialEq, Debug)]
18     enum Out {
19         Finish,
20         Fail,
21     }
22 
23     // ylong_runtime_macro::tuple_form!(x with A except B at y);
24     // tuple's length = number of `x`'s round brackets - 2
25     // tuple's default element = `A`
26     // tuple's except element = `B`
27     // tuple's except element's index = `y`'s TokenTree count, in addition to the
28     // parentheses
29     let tuple = ylong_runtime_macros::tuple_form!(( (((0)+1)+1) ) with Out::Fail except Out::Finish at ( ) );
30     assert_eq!(tuple, (Out::Finish, Out::Fail));
31 
32     let tuple = ylong_runtime_macros::tuple_form!(( (((0)+1)+1) ) with Out::Fail except Out::Finish at ( _ ) );
33     assert_eq!(tuple, (Out::Fail, Out::Finish));
34 
35     let tuple = ylong_runtime_macros::tuple_form!(( ((((0)+1)+1)+1) ) with Out::Fail except Out::Finish at ( _ _ ) );
36     assert_eq!(tuple, (Out::Fail, Out::Fail, Out::Finish));
37 
38     let tuple = ylong_runtime_macros::tuple_form!(( (((((0)+1)+1)+1)+1) ) with Out::Fail except Out::Finish at ( _ _ _ ) );
39     assert_eq!(tuple, (Out::Fail, Out::Fail, Out::Fail, Out::Finish));
40 }
41