/// Keys may be optional. If all keys are optional, then we require additionally that every element
/// * `name : type { func() }` - A key whose name is `name` and type is `type`, that can be accessed
/// * `name : type { .field }` - A key whose name is `name` and type is `type`, that can be accessed
/// You can put generic parameters and `where` constraints on your structure. The `where` clause (if
/// brackets instead of angle brackets, and specify both the generic parameters *and* the type that
"A list of elements of type `", stringify!($V), "` whose members can be accessed by multiple keys."
/// Key types must have consistent `Hash` and `Eq` implementations, as they will be used as keys
/// If all keys are optional, then every element inserted must have at least one non-`None` key.
/// The SmallVec size of 4 was chosen arbitrarily under the assumption that a given key will
$([<$key _map>]: std::collections::HashMap<$KEY, $crate::n_key_list::deps::SmallVec<[usize; 4]>> , )+
$vis fn [<by_ $key>] <BorrowAsKey_>(&self, key: &BorrowAsKey_) -> [<$mapname Iter>] <'_, $V>
let $key = $crate::n_key_list!( @access(removed, ($($($flag)+)?) $key : $KEY $({$($source)+})?) );
let $key = $crate::n_key_list!( @access(value, ($($($flag)+)?) $key : $KEY $({$($source)+})?) );
let $key = $crate::n_key_list!( @access(value, ($($($flag)+)?) $key : $KEY $({$($source)+})?) );
let $key = $crate::n_key_list!( @access(value, ($($($flag)+)?) $key : $KEY $({$($source)+})?) );
let $key = $crate::n_key_list!( @access(value, ($($($flag)+)?) $key : $KEY $({$($source)+})?) );
// Helper: Generate an expression to access a specific key and return an `Option<&TYPE>` for that