capydi
Loading...
Searching...
No Matches
RequiredFieldsUsageValidator.hpp
Go to the documentation of this file.
1#ifndef CAPYDI_REQUIRED_FIELDS_USAGE_VALIDATOR_HPP_
2#define CAPYDI_REQUIRED_FIELDS_USAGE_VALIDATOR_HPP_
3
5#include <vector>
6
7namespace capy::di
8{
9
11{
12public:
13 constexpr explicit RequiredFieldUsageObserver(const bool& used)
14 : used_ { used }
15 {}
16
17public:
18 constexpr bool validate() const
19 {
20 return this->used_;
21 }
22
23private:
24 const bool& used_;
25};
26
28{
29public:
32 ) {
33 this->observers_.push_back(std::move(observer));
34 }
35
36 constexpr bool validate() const noexcept
37 {
38 bool validation_result = true;
39
40 for (const RequiredFieldUsageObserver& observer : this->observers_)
41 {
42 validation_result = validation_result && observer.validate();
43 }
44
45 return validation_result;
46 }
47
48private:
49 std::vector<RequiredFieldUsageObserver> observers_;
50};
51
52template<typename Type>
54{
55public:
56 constexpr explicit RequiredField(
57 Type&& data,
59 )
60 : data_ { std::move(data) }
61 , used_ { false }
62 {
64 this->used_
65 });
66 }
67
68public:
69 constexpr Type& value() noexcept
70 {
71 this->used_ = true;
72 return this->data_;
73 }
74
75 constexpr const Type& value() const noexcept
76 {
77 this->used_ = true;
78 return this->data_;
79 }
80
81private:
82 Type data_;
83 mutable bool used_;
84};
85
87{
88public:
89 constexpr bool validate() const noexcept
90 {
91 return this->validator_.validate();
92 }
93
94protected:
96 {
97 return this->validator_;
98 }
99
100private:
102};
103
104}
105
106#endif // !CAPYDI_REQUIRED_FIELDS_USAGE_VALIDATOR_HPP_
Definition RequiredFieldsUsageValidator.hpp:11
constexpr bool validate() const
Definition RequiredFieldsUsageValidator.hpp:18
constexpr RequiredFieldUsageObserver(const bool &used)
Definition RequiredFieldsUsageValidator.hpp:13
constexpr Type & value() noexcept
Definition RequiredFieldsUsageValidator.hpp:69
constexpr RequiredField(Type &&data, RequiredFieldsUsageValidator &validator)
Definition RequiredFieldsUsageValidator.hpp:56
constexpr const Type & value() const noexcept
Definition RequiredFieldsUsageValidator.hpp:75
Definition RequiredFieldsUsageValidator.hpp:28
constexpr void register_required_field(RequiredFieldUsageObserver &&observer)
Definition RequiredFieldsUsageValidator.hpp:30
constexpr bool validate() const noexcept
Definition RequiredFieldsUsageValidator.hpp:36
Definition RequiredFieldsUsageValidator.hpp:87
constexpr RequiredFieldsUsageValidator & fields_validator() noexcept
Definition RequiredFieldsUsageValidator.hpp:95
constexpr bool validate() const noexcept
Definition RequiredFieldsUsageValidator.hpp:89
Definition Decorator.hpp:19