Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Copyright (c) 2024 Muhammad Nawaz | ||
3 | * Licensed under the MIT License. See LICENSE file for more information. | ||
4 | */ | ||
5 | // [ END OF LICENSE c6bd0f49d040fca8d8a9cb05868e66aa63f0e2e0 ] | ||
6 | |||
7 | #include "validators/param_validators.hpp" | ||
8 | #include "deserializers/array_deserializer.hpp" | ||
9 | #include "deserializers/content_deserializer.hpp" | ||
10 | #include "deserializers/object_deserializer.hpp" | ||
11 | #include "deserializers/primitive_deserializer.hpp" | ||
12 | |||
13 | namespace { | ||
14 | 809 | inline char GetStartChar(ParamStyle param_style) | |
15 | { | ||
16 |
3/3✓ Branch 0 taken 82 times.
✓ Branch 1 taken 74 times.
✓ Branch 2 taken 653 times.
|
809 | switch (param_style) { |
17 | 82 | case ParamStyle::LABEL: | |
18 | 82 | return '.'; | |
19 | 74 | case ParamStyle::MATRIX: | |
20 | 74 | return ';'; | |
21 | 653 | default: | |
22 | 653 | return '\0'; | |
23 | } | ||
24 | } | ||
25 | |||
26 | 809 | inline bool HasNameAtStart(const std::string& in, ParamStyle style, bool explode, ExtendedType type) | |
27 | { | ||
28 |
3/4✓ Branch 0 taken 397 times.
✓ Branch 1 taken 370 times.
✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
|
809 | switch (style) { |
29 | 397 | case ParamStyle::SIMPLE: | |
30 | case ParamStyle::LABEL: | ||
31 | 397 | return false; | |
32 | 370 | case ParamStyle::MATRIX: | |
33 | case ParamStyle::FORM: | ||
34 | case ParamStyle::SPACE_DELIM: | ||
35 | case ParamStyle::PIPE_DELIM: | ||
36 | case ParamStyle::DEEP_OBJ: | ||
37 |
6/6✓ Branch 0 taken 259 times.
✓ Branch 1 taken 111 times.
✓ Branch 2 taken 83 times.
✓ Branch 3 taken 176 times.
✓ Branch 4 taken 98 times.
✓ Branch 5 taken 96 times.
|
370 | return (ExtendedType::ARRAY != type && ExtendedType::OBJECT != type) || !explode; |
38 | 42 | case ParamStyle::CONTENT: | |
39 | 42 | return "query" == in; | |
40 | ✗ | default: | |
41 | ✗ | return false; | |
42 | } | ||
43 | } | ||
44 | |||
45 | 260 | inline char GetArrayItemsSeparator(ParamStyle param_style, bool explode) | |
46 | { | ||
47 |
2/2✓ Branch 0 taken 132 times.
✓ Branch 1 taken 128 times.
|
260 | if (explode) { |
48 |
4/4✓ Branch 0 taken 16 times.
✓ Branch 1 taken 11 times.
✓ Branch 2 taken 52 times.
✓ Branch 3 taken 53 times.
|
132 | switch (param_style) { |
49 | 16 | case ParamStyle::LABEL: | |
50 | 16 | return '.'; | |
51 | 11 | case ParamStyle::MATRIX: | |
52 | 11 | return ';'; | |
53 | 52 | case ParamStyle::FORM: | |
54 | case ParamStyle::SPACE_DELIM: | ||
55 | case ParamStyle::PIPE_DELIM: | ||
56 | 52 | return '&'; | |
57 | 53 | default: | |
58 | 53 | return ','; | |
59 | } | ||
60 | } else { | ||
61 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 123 times.
|
128 | if (ParamStyle::SPACE_DELIM == param_style) { |
62 | 5 | return '%'; | |
63 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 118 times.
|
123 | } else if (ParamStyle::PIPE_DELIM == param_style) { |
64 | 5 | return '|'; | |
65 | } | ||
66 | } | ||
67 | 118 | return ','; | |
68 | } | ||
69 | 260 | inline bool HasArrayRunningName(ParamStyle param_style, bool explode) | |
70 | { | ||
71 |
2/2✓ Branch 0 taken 132 times.
✓ Branch 1 taken 128 times.
|
260 | if (explode) { |
72 |
2/2✓ Branch 0 taken 63 times.
✓ Branch 1 taken 69 times.
|
132 | switch (param_style) { |
73 | 63 | case ParamStyle::MATRIX: | |
74 | case ParamStyle::FORM: | ||
75 | case ParamStyle::SPACE_DELIM: | ||
76 | case ParamStyle::PIPE_DELIM: | ||
77 | 63 | return true; | |
78 | 69 | default: | |
79 | 69 | return false; | |
80 | } | ||
81 | } | ||
82 | 128 | return false; | |
83 | } | ||
84 | |||
85 | 150 | inline char GetObjKVSep(bool explode) | |
86 | { | ||
87 |
2/2✓ Branch 0 taken 65 times.
✓ Branch 1 taken 85 times.
|
150 | if (explode) { |
88 | 65 | return '='; | |
89 | } | ||
90 | 85 | return ','; | |
91 | } | ||
92 | |||
93 | 150 | inline char GetObjVKSep(ParamStyle param_style, bool explode) | |
94 | { | ||
95 |
2/2✓ Branch 0 taken 65 times.
✓ Branch 1 taken 85 times.
|
150 | if (explode) { |
96 |
4/4✓ Branch 0 taken 7 times.
✓ Branch 1 taken 7 times.
✓ Branch 2 taken 26 times.
✓ Branch 3 taken 25 times.
|
65 | switch (param_style) { |
97 | 7 | case ParamStyle::LABEL: | |
98 | 7 | return '.'; | |
99 | 7 | case ParamStyle::MATRIX: | |
100 | 7 | return ';'; | |
101 | 26 | case ParamStyle::FORM: | |
102 | case ParamStyle::DEEP_OBJ: | ||
103 | 26 | return '&'; | |
104 | 25 | default: | |
105 | 25 | return ','; | |
106 | } | ||
107 | } | ||
108 | 85 | return ','; | |
109 | } | ||
110 | |||
111 | const std::unordered_map<std::string, ParamStyle> PARAM_STYLE_MAP = {{"simple", ParamStyle::SIMPLE}, | ||
112 | {"label", ParamStyle::LABEL}, | ||
113 | {"matrix", ParamStyle::MATRIX}, | ||
114 | {"form", ParamStyle::FORM}, | ||
115 | {"spaceDelimited", ParamStyle::SPACE_DELIM}, | ||
116 | {"pipeDelimited", ParamStyle::PIPE_DELIM}, | ||
117 | {"deepObject", ParamStyle::DEEP_OBJ}, | ||
118 | {"content", ParamStyle::CONTENT}}; | ||
119 | |||
120 | const std::unordered_map<std::string, PrimitiveType> PRIMITIVE_TYPE_MAP = {{"boolean", PrimitiveType::BOOLEAN}, | ||
121 | {"integer", PrimitiveType::INTEGER}, | ||
122 | {"number", PrimitiveType::NUMBER}, | ||
123 | {"string", PrimitiveType::STRING}}; | ||
124 | |||
125 | const std::unordered_map<std::string, ExtendedType> EXTENDED_TYPE_MAP = {{"boolean", ExtendedType::BOOLEAN}, | ||
126 | {"integer", ExtendedType::INTEGER}, | ||
127 | {"number", ExtendedType::NUMBER}, | ||
128 | {"string", ExtendedType::STRING}, | ||
129 | {"array", ExtendedType::ARRAY}, | ||
130 | {"object", ExtendedType::OBJECT}}; | ||
131 | |||
132 | 150 | ObjKTMap GetKTMap(const rapidjson::Value& param_val, const std::vector<std::string>& ref_keys) | |
133 | { | ||
134 | 150 | ObjKTMap kt_map; | |
135 |
7/12✓ Branch 1 taken 150 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 150 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 150 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 150 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 150 times.
✗ Branch 14 not taken.
✓ Branch 18 taken 324 times.
✓ Branch 19 taken 150 times.
|
474 | for (const auto& prop : param_val["schema"]["properties"].GetObject()) { |
136 | // Ensure each property has a "type" member, and it's a string | ||
137 |
2/4✓ Branch 2 taken 324 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 324 times.
✗ Branch 6 not taken.
|
324 | std::string prop_name(prop.name.GetString()); |
138 |
2/4✓ Branch 1 taken 324 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 324 times.
✗ Branch 4 not taken.
|
324 | if (prop.value.HasMember("type")) { |
139 | |||
140 |
3/6✓ Branch 2 taken 324 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 324 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 324 times.
✗ Branch 9 not taken.
|
324 | std::string prop_type(prop.value["type"].GetString()); |
141 | try { | ||
142 |
4/8✓ Branch 1 taken 324 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 324 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 324 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 324 times.
✗ Branch 11 not taken.
|
324 | kt_map.emplace("\"" + prop_name + "\"", PRIMITIVE_TYPE_MAP.at(prop_type)); |
143 | ✗ | } catch (const std::out_of_range&) { | |
144 | ✗ | throw ValidatorInitExc("Type '" + prop_type + "' of property '" + prop_name + "' of parameter '" + | |
145 | ✗ | JoinReference(ref_keys) + "' is not supported"); | |
146 | ✗ | } | |
147 | 324 | } else { | |
148 | ✗ | throw ValidatorInitExc("Type id missing for property '" + prop_name + "' of parameter '" + | |
149 | ✗ | JoinReference(ref_keys) + "'"); | |
150 | } | ||
151 | 474 | } | |
152 | 150 | return kt_map; | |
153 | ✗ | } | |
154 | |||
155 | 809 | BaseDeserializer* GetDeserializer(const rapidjson::Value& param_val, const std::string& default_style, | |
156 | bool default_explode, const std::vector<std::string>& ref_keys) | ||
157 | { | ||
158 |
3/6✓ Branch 2 taken 809 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 809 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 809 times.
✗ Branch 9 not taken.
|
809 | std::string param_name(param_val["name"].GetString()); |
159 |
3/6✓ Branch 2 taken 809 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 809 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 809 times.
✗ Branch 9 not taken.
|
809 | std::string in(param_val["in"].GetString()); |
160 |
5/8✓ Branch 1 taken 809 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 719 times.
✓ Branch 4 taken 90 times.
✓ Branch 6 taken 719 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 719 times.
✗ Branch 10 not taken.
|
809 | auto explode(param_val.HasMember("explode") ? param_val["explode"].GetBool() : default_explode); |
161 | auto param_style = | ||
162 |
10/18✓ Branch 1 taken 809 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 713 times.
✓ Branch 4 taken 96 times.
✓ Branch 7 taken 713 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 713 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 713 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 96 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 809 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 713 times.
✓ Branch 23 taken 96 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
809 | PARAM_STYLE_MAP.at(param_val.HasMember("style") ? param_val["style"].GetString() : default_style); |
163 | |||
164 | 809 | auto start = GetStartChar(param_style); | |
165 | |||
166 |
8/12✓ Branch 1 taken 809 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 767 times.
✓ Branch 4 taken 42 times.
✓ Branch 6 taken 767 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 767 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 767 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 767 times.
✓ Branch 14 taken 42 times.
|
809 | if (param_val.HasMember("schema") && param_val["schema"].HasMember("type")) { |
167 |
4/8✓ Branch 2 taken 767 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 767 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 767 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 767 times.
✗ Branch 12 not taken.
|
767 | std::string type(param_val["schema"]["type"].GetString()); |
168 |
2/4✓ Branch 1 taken 767 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 767 times.
✗ Branch 5 not taken.
|
767 | auto skip_name = HasNameAtStart(in, param_style, explode, EXTENDED_TYPE_MAP.at(type)); |
169 |
4/6✓ Branch 1 taken 767 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 357 times.
✓ Branch 4 taken 260 times.
✓ Branch 5 taken 150 times.
✗ Branch 6 not taken.
|
767 | switch (EXTENDED_TYPE_MAP.at(type)) { |
170 | 357 | case ExtendedType::BOOLEAN: | |
171 | case ExtendedType::INTEGER: | ||
172 | case ExtendedType::NUMBER: | ||
173 | case ExtendedType::STRING: | ||
174 |
3/6✓ Branch 1 taken 357 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 357 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 357 times.
✗ Branch 8 not taken.
|
357 | return new PrimitiveDeserializer(param_name, start, skip_name, PRIMITIVE_TYPE_MAP.at(type)); |
175 | 260 | case ExtendedType::ARRAY: { | |
176 |
8/16✓ Branch 1 taken 260 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 260 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 260 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 260 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 260 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 260 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 260 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 260 times.
✗ Branch 20 not taken.
|
260 | if (param_val["schema"].HasMember("items") && param_val["schema"]["items"].HasMember("type")) { |
177 |
5/10✓ Branch 2 taken 260 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 260 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 260 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 260 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 260 times.
✗ Branch 15 not taken.
|
260 | auto items_type_s(std::string(param_val["schema"]["items"]["type"].GetString())); |
178 | try { | ||
179 |
1/2✓ Branch 1 taken 260 times.
✗ Branch 2 not taken.
|
260 | auto items_type = PRIMITIVE_TYPE_MAP.at(items_type_s); |
180 | 260 | auto separator = GetArrayItemsSeparator(param_style, explode); | |
181 | 260 | auto has_running_name = HasArrayRunningName(param_style, explode); | |
182 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 250 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
260 | bool has_20_separator(ParamStyle::SPACE_DELIM == param_style && !explode); |
183 | return new ArrayDeserializer(param_name, start, skip_name, items_type, separator, has_running_name, | ||
184 |
2/4✓ Branch 1 taken 260 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 260 times.
✗ Branch 5 not taken.
|
260 | has_20_separator); |
185 | ✗ | } catch (const std::out_of_range&) { | |
186 | ✗ | throw ValidatorInitExc("Type '" + items_type_s + "' of items of array parameter '" + | |
187 | ✗ | JoinReference(ref_keys) + "' is not supported"); | |
188 | ✗ | } | |
189 | 260 | } else { | |
190 | ✗ | throw ValidatorInitExc("Array parameter '" + JoinReference(ref_keys) + "' does not have type of items"); | |
191 | } | ||
192 | } | ||
193 | 150 | case ExtendedType::OBJECT: { | |
194 | 150 | auto kv_separator = GetObjKVSep(explode); | |
195 | 150 | auto vk_separator = GetObjVKSep(param_style, explode); | |
196 | 150 | auto is_deep_obj(ParamStyle::DEEP_OBJ == param_style); | |
197 |
1/2✓ Branch 1 taken 150 times.
✗ Branch 2 not taken.
|
150 | auto kt_map = GetKTMap(param_val, ref_keys); |
198 | return new ObjectDeserializer(param_name, start, skip_name, kv_separator, vk_separator, is_deep_obj, | ||
199 |
2/4✓ Branch 1 taken 150 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 150 times.
✗ Branch 5 not taken.
|
150 | kt_map); |
200 | 150 | } | |
201 | ✗ | default: | |
202 | ✗ | throw ValidatorInitExc("Invalid type of parameter: " + JoinReference(ref_keys)); | |
203 | } | ||
204 |
2/4✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
|
809 | } else if (param_val.HasMember("content")) { |
205 |
1/2✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
|
42 | auto skip_name = HasNameAtStart(in, ParamStyle::CONTENT, explode, ExtendedType::OBJECT); |
206 |
2/4✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
|
42 | return new ContentDeserializer(param_name, start, skip_name); |
207 | } | ||
208 | ✗ | throw ValidatorInitExc("Invalid type of parameter: " + JoinReference(ref_keys)); | |
209 | 809 | } | |
210 | } // namespace | ||
211 | |||
212 | 809 | ParamValidator::ParamValidator(const ParamInfo& param_info, const std::vector<std::string>& ref_keys, | |
213 | 809 | ValidationError err_code) | |
214 | : JsonValidator(param_info.schema, ref_keys, err_code) | ||
215 | 809 | , name_(param_info.name) | |
216 | 809 | , required_(param_info.required) | |
217 |
1/2✓ Branch 2 taken 809 times.
✗ Branch 3 not taken.
|
809 | , deserializer_(param_info.deserializer) |
218 | { | ||
219 | 809 | } | |
220 | |||
221 | 208 | ValidationError ParamValidator::ValidateParam(const char* beg, const char* end, std::string& error_msg) | |
222 | { | ||
223 | try { | ||
224 |
2/2✓ Branch 1 taken 150 times.
✓ Branch 2 taken 58 times.
|
208 | auto ret = deserializer_->Deserialize(beg, end); |
225 |
1/2✓ Branch 1 taken 150 times.
✗ Branch 2 not taken.
|
150 | return JsonValidator::Validate(ret, error_msg); |
226 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 58 times.
|
208 | } catch (const DeserializationException& exc) { |
227 |
2/4✓ Branch 2 taken 58 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 58 times.
✗ Branch 6 not taken.
|
58 | error_msg = err_header_ + exc.what() + "}}"; |
228 | 58 | return code_on_error_; | |
229 | 58 | } | |
230 | } | ||
231 | |||
232 | 4 | bool ParamValidator::IsRequired() const | |
233 | { | ||
234 | 4 | return required_; | |
235 | } | ||
236 | |||
237 | ✗ | ValidationError ParamValidator::ErrorOnMissing(std::string& error_msg) const | |
238 | { | ||
239 | ✗ | error_msg = err_header_ + R"("description":"Missing required parameter ')" + name_ + R"('"}})"; | |
240 | ✗ | return code_on_error_; | |
241 | } | ||
242 | |||
243 | 809 | ParamValidator::ParamInfo ParamValidator::GetParamInfo(const rapidjson::Value& param_val, | |
244 | const std::string& default_style, bool default_explode, | ||
245 | bool default_required, const std::vector<std::string>& ref_keys) | ||
246 | { | ||
247 |
3/6✓ Branch 2 taken 809 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 809 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 809 times.
✗ Branch 9 not taken.
|
809 | std::string name(param_val["name"].GetString()); |
248 |
5/8✓ Branch 1 taken 809 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 737 times.
✓ Branch 4 taken 72 times.
✓ Branch 6 taken 737 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 737 times.
✗ Branch 10 not taken.
|
809 | auto required(param_val.HasMember("required") ? param_val["required"].GetBool() : default_required); |
249 | |||
250 |
3/4✓ Branch 1 taken 809 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 767 times.
✓ Branch 4 taken 42 times.
|
809 | if (param_val.HasMember("schema")) { |
251 | 1534 | return {name, required, GetDeserializer(param_val, default_style, default_explode, ref_keys), | |
252 |
3/6✓ Branch 1 taken 767 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 767 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 767 times.
✗ Branch 8 not taken.
|
767 | param_val["schema"]}; |
253 |
6/12✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 42 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 42 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 42 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 42 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 42 times.
✗ Branch 14 not taken.
|
84 | } else if (param_val.HasMember("content") && param_val["content"].HasMember("application/json") && |
254 |
4/8✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 42 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 42 times.
✗ Branch 10 not taken.
|
42 | param_val["content"]["application/json"].HasMember("schema")) { |
255 | 84 | return {name, required, GetDeserializer(param_val, default_style, default_explode, ref_keys), | |
256 |
5/10✓ Branch 1 taken 42 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 42 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 42 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 42 times.
✗ Branch 14 not taken.
|
42 | param_val["content"]["application/json"]["schema"]}; |
257 | } else { | ||
258 | ✗ | throw ValidatorInitExc("Cannot generate deserializer for parameter: " + JoinReference(ref_keys)); | |
259 | } | ||
260 | 809 | } | |
261 | |||
262 | 289 | PathParamValidator::PathParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& ref_keys) | |
263 |
2/4✓ Branch 1 taken 289 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 289 times.
✗ Branch 5 not taken.
|
578 | : ParamValidator(ParamValidator::GetParamInfo(param_val, "simple", false, true, ref_keys), ref_keys, |
264 |
1/2✓ Branch 2 taken 289 times.
✗ Branch 3 not taken.
|
578 | ValidationError::INVALID_PATH_PARAM) |
265 | { | ||
266 | 289 | } | |
267 | |||
268 | 314 | QueryParamValidator::QueryParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& ref_keys) | |
269 |
2/4✓ Branch 1 taken 314 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 314 times.
✗ Branch 5 not taken.
|
628 | : ParamValidator(ParamValidator::GetParamInfo(param_val, "form", true, false, ref_keys), ref_keys, |
270 | ValidationError::INVALID_QUERY_PARAM) | ||
271 |
3/12✓ Branch 2 taken 314 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 314 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 314 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
|
942 | , empty_allowed_(param_val.HasMember("allowEmptyValue") && param_val["allowEmptyValue"].GetBool()) |
272 | { | ||
273 | 314 | } | |
274 | |||
275 | ✗ | bool QueryParamValidator::IsEmptyAllowed() const | |
276 | { | ||
277 | ✗ | return empty_allowed_; | |
278 | } | ||
279 | |||
280 | 206 | HeaderParamValidator::HeaderParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& ref_keys) | |
281 |
2/4✓ Branch 1 taken 206 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 206 times.
✗ Branch 5 not taken.
|
412 | : ParamValidator(ParamValidator::GetParamInfo(param_val, "simple", false, false, ref_keys), ref_keys, |
282 |
1/2✓ Branch 2 taken 206 times.
✗ Branch 3 not taken.
|
412 | ValidationError::INVALID_HEADER_PARAM) |
283 | { | ||
284 | 206 | } | |
285 |