35 lines
655 B
Rust
35 lines
655 B
Rust
#![feature(more_qualified_paths)]
|
|
|
|
mod foo_bar {
|
|
pub enum Example {
|
|
Example1 {},
|
|
Example2 {},
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
foo!(crate::foo_bar::Example, Example1);
|
|
|
|
let i1 = foo_bar::Example::Example1 {};
|
|
|
|
assert_eq!(i1.foo_example(), 1);
|
|
|
|
let i2 = foo_bar::Example::Example2 {};
|
|
|
|
assert_eq!(i2.foo_example(), 2);
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! foo {
|
|
($struct:path, $variant:ident) => {
|
|
impl $struct {
|
|
pub fn foo_example(&self) -> i32 {
|
|
match self {
|
|
<$struct>::$variant { .. } => 1,
|
|
_ => 2,
|
|
}
|
|
}
|
|
}
|
|
};
|
|
}
|