2 releases (1 stable)
new 1.0.0 | May 6, 2025 |
---|---|
0.0.1 | Jul 19, 2022 |
#237 in Procedural macros
3,463 downloads per month
13KB
196 lines
match-template
Overview
match-template is a procedural macro that generates repeated match arms by pattern.
This crate provides a macro that can be used to append a match expression with multiple arms, where the tokens in the first arm, as a template, can be substituted and the template arm will be expanded into multiple arms.
For example, the following code
match_template! {
T = [Int, Real, Double],
match Foo {
EvalType::T => { panic!("{}", EvalType::T); },
EvalType::Other => unreachable!(),
}
}
generates
match Foo {
EvalType::Int => { panic!("{}", EvalType::Int); },
EvalType::Real => { panic!("{}", EvalType::Real); },
EvalType::Double => { panic!("{}", EvalType::Double); },
EvalType::Other => unreachable!(),
}
In addition, substitution can vary on two sides of the arms.
For example, the following code
match_template! {
T = [Foo, Bar => Baz],
match Foo {
EvalType::T => { panic!("{}", EvalType::T); },
}
}
generates
match Foo {
EvalType::Foo => { panic!("{}", EvalType::Foo); },
EvalType::Bar => { panic!("{}", EvalType::Baz); },
}
Wildcard match arm is also supported (but there will be no substitution).
License and Origins
This project is licensed under the Apache License, Version 2.0. See the LICENSE file for details.
This repository is a fork of tikv/match-template since the upstream is unmaintained. The original project is licensed under the Apache License, Version 2.0.
Dependencies
~220–660KB
~16K SLoC