77 KeywordLocation location;
78 std::size_t record_number;
79 std::optional<std::size_t> item_number;
80 std::optional<std::string> item_value;
81 std::optional<std::string> user_message;
88 std::string get_error_report(
const std::vector<ValidationError>& errors,
98 class KeywordValidator
101 KeywordValidator(
const UnsupportedKeywords& unsupported_keywords,
104 const std::unordered_map<std::string, ValidationFunction>& special_validation)
105 : m_unsupported_keywords(unsupported_keywords)
106 , m_partially_supported_keywords(partially_supported_keywords)
107 , m_fully_supported_keywords(fully_supported_keywords)
108 , m_special_validation(special_validation)
117 void validateDeck(
const Deck& deck,
118 const ParseContext& parse_context,
119 const bool treat_critical_as_noncritical,
120 ErrorGuard& error_guard)
const;
124 void validateDeckKeyword(
const DeckKeyword& keyword, std::vector<ValidationError>& errors)
const;
127 template <
typename T>
128 void validateKeywordItem(
const DeckKeyword& keyword,
130 const bool multiple_records,
131 const std::size_t record_number,
132 const std::size_t item_number,
134 std::vector<ValidationError>& errors)
const;
136 void validateKeywordItems(
const DeckKeyword& keyword,
138 std::vector<ValidationError>& errors)
const;
140 template <
typename T>
141 void validateKeywordItems(
const DeckKeyword& keyword,
142 const SupportedKeywordItems<T>& supported_options,
143 std::vector<ValidationError>& errors)
const;
145 const UnsupportedKeywords m_unsupported_keywords;
148 const std::unordered_map<std::string, ValidationFunction> m_special_validation;
157 allow_values(
const std::initializer_list<T>& allowed_values)
159 std::copy(allowed_values.begin(),
160 allowed_values.end(),
161 std::back_inserter(m_allowed_values));
164 bool operator()(
const T& value)
const
166 return std::find(m_allowed_values.begin(), m_allowed_values.end(), value) != m_allowed_values.end();
170 std::vector<T> m_allowed_values;