12#ifndef VARIANTVALIDATOR_HPP
13#define VARIANTVALIDATOR_HPP
15#include "usmtf_export.h"
20#include <unordered_map>
34struct static_all_of<true, tail...> : static_all_of<tail...>
40struct static_all_of<false, tail...> : std::false_type
46struct static_all_of<> : std::true_type
60template<
typename... Types>
63 static_assert(static_all_of<std::is_base_of<FFIRN_Validator, Types>::value...>::value,
64 "Invalid Type, Must be an FFIRN_Validator");
81 bool res = ParseAndValidateP<0,
sizeof...(Types)>{}(*
this, aField);
93 return dynamic_cast<T*
>(mValidator);
97 bool HasMatch()
const {
return mValidator !=
nullptr; }
100 template<
int N,
int TypeCount>
101 struct ParseAndValidateP
105 auto& ref = std::get<N>(aValidator.mTypeInstances);
106 if (ref.ParseAndValidate(aField))
108 aValidator.mValidator = &ref;
115 return ParseAndValidateP<N + 1, TypeCount>{}(aValidator, aField);
120 struct ParseAndValidateP<N, N>
126 std::tuple<Types...> mTypeInstances;
void AddErrors(const std::vector< ValidationError > &aErrors) noexcept
Definition ErrorManager.cpp:53
void ClearErrorsIfValid(bool aHasAtLeastOnePassed) noexcept
Definition FFIRN_Validator.cpp:49
FFIRN_Validator()=default
Definition VariantValidator.hpp:62
VariantValidator()=default
T * IsMatch() const
Definition VariantValidator.hpp:91
bool ParseAndValidate(const usmtf::Field &aField) override
Definition VariantValidator.hpp:79
VariantValidator operator=(const VariantValidator &&aOther)=delete
bool HasMatch() const
Returns false if no match was made or Parse and Validate has yet to be called.
Definition VariantValidator.hpp:97
VariantValidator(const VariantValidator &aOther)=delete
VariantValidator operator=(const VariantValidator &aOther)=delete
VariantValidator(const VariantValidator &&aOther)=delete