template <typename T>
concept QuerySettingsOnResolveHook =
requires(OperationContext* opCtx, const QuerySettings& querySettings) {
{ T::run(opCtx, querySettings) } -> std::same_as<void>;
};
struct QuerySettingsRejectionHook {
static void run(OperationContext* opCtx, const QuerySettings& querySettings) {
}
};
struct QuerySettingsMaxTimeMSHook {
static void run(OperationContext* opCtx, const QuerySettings& querySettings) {
}
};
struct BackfillRepresentativeQueriesHook {
static void run(OperationContext* opCtx, const QuerySettings& querySettings) {
}
};
template <QuerySettingsOnResolveHook... Rules>
struct CombineHooks {
static void run(OperationContext* opCtx, const QuerySettings& querySettings) {
(Rules::run(opCtx, querySettings), ...);
}
};
using QuerySettingsPostResolutionHook =
CombineHooks<BackfillRepresentativeQueriesHook, QuerySettingsRejectionHook, QuerySettingsMaxTimeMSHook>;
QuerySettingsPostResolutionHook::run(opCtx, querySettings);