macro_rules! define_edge_type {
(
struct $name:ident $( ( $($visibility:vis $field_ty:ty),* $(,)? ) )?,
$entity:ident
$(, $($extra:tt)+),*
) => { ... };
(
struct $name:ident { $($visibility:vis $field_name:ident : $field_ty:ty),* $(,)? },
$entity:ident
$(, $($extra:tt)+),*
) => { ... };
(
enum $name:ident {
$($variant:ident),* $(,)?
},
$entity:ident
$(, $($extra:tt)+),*
) => { ... };
}