+ pub $name: for<'a> fn(TyCtxt<'a, $tcx, $tcx>, $K) -> $R,)
+ }
+ };
+
+ // The `multi` modifier indicates a **multiquery**, in which case
+ // the function returns a `FxHashMap<K,V>` instead of just a value
+ // `V`.
+ (tcx: $tcx:tt,
+ input: (([multi $($other_modifiers:tt)*] $name:tt [$K:ty] [$V:ty]) $($input:tt)*),
+ output: $output:tt) => {
+ define_provider_struct! {
+ tcx: $tcx,
+ ready: ($name [$K] [FxHashMap<$K,$V>]),
+ input: ($($input)*),
+ output: $output
+ }
+ };
+
+ // Regular queries produce a `V` only.
+ (tcx: $tcx:tt,
+ input: (([] $name:tt $K:tt $V:tt) $($input:tt)*),
+ output: $output:tt) => {
+ define_provider_struct! {
+ tcx: $tcx,
+ ready: ($name $K $V),
+ input: ($($input)*),
+ output: $output
+ }
+ };
+
+ // Skip modifiers other than `multi`.
+ (tcx: $tcx:tt,
+ input: (([$other_modifier:tt $($modifiers:tt)*] $($fields:tt)*) $($input:tt)*),
+ output: $output:tt) => {
+ define_provider_struct! {
+ tcx: $tcx,
+ input: (([$($modifiers)*] $($fields)*) $($input)*),
+ output: $output