macro_rules! shape_select { ( $Select:ident { $( $Enum:ident ( $Param:ident = $Shape:ty ) ),+ $(,)? } ) => { ... }; }
The macro for making a union of shapes.
You can read more about the technique here.