Replace code with macro

This commit is contained in:
Nicolas 2022-04-09 19:37:57 +02:00
parent d8fdc142e6
commit 4ff02a66fc

View File

@ -35,23 +35,27 @@ mod timer;
mod runner; mod runner;
mod choose; mod choose;
macro_rules! options {
($name:ident { $($opt:ident,)* }) => {
#[derive(Copy, Clone, ArgEnum)] #[derive(Copy, Clone, ArgEnum)]
enum AnimationType { enum $name {
$($opt,)*
}
impl Options for $name {
fn all() -> Vec<Self> {
vec![$($name::$opt,)*]
}
}
}
}
options!(AnimationType {
Circle, Circle,
Rhombus, Rhombus,
Rotation Rotation,
} });
impl Options for AnimationType { options!(ColorType {
fn all() -> Vec<Self> where Self: Sized {
use AnimationType::*;
vec![Circle, Rhombus, Rotation]
}
}
#[derive(Copy, Clone, ArgEnum)]
enum ColorType {
Red, Red,
Green, Green,
Blue, Blue,
@ -60,30 +64,13 @@ enum ColorType {
LightBlue, LightBlue,
Grey, Grey,
Rainbow, Rainbow,
} });
impl Options for ColorType { options!(FillModeType {
fn all() -> Vec<Self> where Self: Sized {
use ColorType::*;
vec![Red, Green, Blue, LightRed, LightGreen, LightBlue, Grey, Rainbow]
}
}
#[derive(Copy, Clone, ArgEnum)]
enum FillModeType {
Circle, Circle,
Level, Level,
Stripes Stripes,
} });
impl Options for FillModeType {
fn all() -> Vec<Self> where Self: Sized {
use FillModeType::*;
vec![Circle, Level]
}
}
#[derive(Parser)] #[derive(Parser)]
#[clap(author = env ! ("CARGO_PKG_AUTHORS"), version = env ! ("CARGO_PKG_VERSION"), about = env ! ("CARGO_PKG_DESCRIPTION"))] #[clap(author = env ! ("CARGO_PKG_AUTHORS"), version = env ! ("CARGO_PKG_VERSION"), about = env ! ("CARGO_PKG_DESCRIPTION"))]