GCC Code Coverage Report


Directory: ./
File: include/validators/param_validators.hpp
Date: 2024-07-09 12:21:25
Exec Total Coverage
Lines: 4 4 100.0%
Functions: 4 4 100.0%
Branches: 0 0 -%

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 #ifndef PARAM_VALIDATOR_HPP
8 #define PARAM_VALIDATOR_HPP
9
10 #include "deserializers/base_deserializer.hpp"
11 #include "validators/json_validator.hpp"
12 #include <rapidjson/schema.h>
13 #include <unordered_map>
14 #include <utility>
15
16 class ParamValidator: public JsonValidator
17 {
18 private:
19 struct ParamInfo
20 {
21 std::string name;
22 bool required;
23 BaseDeserializer* deserializer;
24 const rapidjson::Value& schema;
25 };
26
27 public:
28 ParamValidator(const ParamInfo& param_info, const std::vector<std::string>& ref_keys, ValidationError err_code);
29 ParamValidator(const ParamValidator&) = delete;
30 ParamValidator& operator=(const ParamValidator&) = delete;
31
32 ValidationError ValidateParam(const char* beg, const char* end, std::string& error_msg);
33 bool IsRequired() const;
34 ValidationError ErrorOnMissing(std::string& error_msg) const;
35 802 ~ParamValidator() override = default;
36
37 protected:
38 static ParamInfo GetParamInfo(const rapidjson::Value& param_val, const std::string& default_style,
39 bool default_explode, bool default_required,
40 const std::vector<std::string>& ref_keys);
41
42 private:
43 const std::string name_;
44 const bool required_;
45 BaseDeserializer* deserializer_;
46 };
47
48 class PathParamValidator final: public ParamValidator
49 {
50 public:
51 explicit PathParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& keys);
52 PathParamValidator(const PathParamValidator&) = delete;
53 PathParamValidator& operator=(const PathParamValidator&) = delete;
54 316 ~PathParamValidator() override = default;
55 };
56
57 class QueryParamValidator final: public ParamValidator
58 {
59 public:
60 explicit QueryParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& keys);
61 QueryParamValidator(const QueryParamValidator&) = delete;
62 QueryParamValidator& operator=(const QueryParamValidator&) = delete;
63 bool IsEmptyAllowed() const;
64 1256 ~QueryParamValidator() override = default;
65
66 private:
67 bool empty_allowed_;
68 };
69
70 class HeaderParamValidator final: public ParamValidator
71 {
72 public:
73 explicit HeaderParamValidator(const rapidjson::Value& param_val, const std::vector<std::string>& keys);
74 HeaderParamValidator(const HeaderParamValidator&) = delete;
75 HeaderParamValidator& operator=(const HeaderParamValidator&) = delete;
76 32 ~HeaderParamValidator() override = default;
77 };
78 #endif // PARAM_VALIDATOR_HPP
79