cppfig 0.1.0
Modern C++20 compile-time type-safe configuration library
Loading...
Searching...
No Matches
interface.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <string_view>
5
6#include "cppfig/diff.h"
7#include "cppfig/setting.h"
8
9namespace cppfig {
10
19template <typename Derived, typename Schema>
21public:
22 using schema_type = Schema;
23
32 template <IsSetting S>
33 requires(Schema::template has_setting<S>)
34 [[nodiscard]] auto Get() const -> typename S::value_type
35 {
36 return static_cast<const Derived*>(this)->template GetImpl<S>();
37 }
38
44 template <IsSetting S>
45 requires(Schema::template has_setting<S>)
46 auto Set(typename S::value_type value) -> Status
47 {
48 return static_cast<Derived*>(this)->template SetImpl<S>(std::move(value));
49 }
50
58 template <IsSetting S>
59 requires(Schema::template has_setting<S>)
60 [[nodiscard]] auto IsOverridden() const -> bool
61 {
62 return static_cast<const Derived*>(this)->template IsOverriddenImpl<S>();
63 }
64
69 [[nodiscard]] auto Load() -> Status { return static_cast<Derived*>(this)->LoadImpl(); }
70
72 [[nodiscard]] auto Save() const -> Status { return static_cast<const Derived*>(this)->SaveImpl(); }
73
75 [[nodiscard]] auto Diff() const -> ConfigDiff { return static_cast<const Derived*>(this)->DiffImpl(); }
76
78 [[nodiscard]] auto ValidateAll() const -> Status
79 {
80 return static_cast<const Derived*>(this)->ValidateAllImpl();
81 }
82
84 [[nodiscard]] auto GetFilePath() const -> std::string_view
85 {
86 return static_cast<const Derived*>(this)->GetFilePathImpl();
87 }
88
89protected:
96};
97
104public:
106
108 [[nodiscard]] virtual auto Load() -> Status = 0;
109
111 [[nodiscard]] virtual auto Save() const -> Status = 0;
112
114 [[nodiscard]] virtual auto GetFilePath() const -> std::string_view = 0;
115
117 [[nodiscard]] virtual auto ValidateAll() const -> Status = 0;
118
120 [[nodiscard]] virtual auto GetDiffString() const -> std::string = 0;
121
122protected:
128};
129
145template <typename ConfigT>
147public:
148 explicit VirtualConfigAdapter(ConfigT& config)
149 : config_(&config)
150 {
151 }
152
153 [[nodiscard]] auto Load() -> Status override { return config_->Load(); }
154
155 [[nodiscard]] auto Save() const -> Status override { return config_->Save(); }
156
157 [[nodiscard]] auto GetFilePath() const -> std::string_view override { return config_->GetFilePath(); }
158
159 [[nodiscard]] auto ValidateAll() const -> Status override { return config_->ValidateAll(); }
160
161 [[nodiscard]] auto GetDiffString() const -> std::string override { return config_->Diff().ToString(); }
162
163private:
164 ConfigT* config_;
165};
166
167} // namespace cppfig
Result of comparing two configurations.
Definition diff.h:40
Virtual interface for type-erased configuration access.
Definition interface.h:103
virtual auto Save() const -> Status=0
Saves the current configuration to the file.
virtual ~IConfigurationProviderVirtual()=default
virtual auto Load() -> Status=0
Loads configuration from the file.
virtual auto GetFilePath() const -> std::string_view=0
Returns the file path.
virtual auto GetDiffString() const -> std::string=0
Gets a string representation of the diff.
virtual auto ValidateAll() const -> Status=0
Validates all current values.
CRTP base class for configuration providers.
Definition interface.h:20
auto GetFilePath() const -> std::string_view
Returns the file path.
Definition interface.h:84
auto Set(typename S::value_type value) -> Status
Sets the value for a setting type.
Definition interface.h:46
auto Diff() const -> ConfigDiff
Returns the diff between file values and defaults.
Definition interface.h:75
auto Load() -> Status
Loads configuration from the file.
Definition interface.h:69
IConfigurationProvider(const IConfigurationProvider &)=default
auto operator=(const IConfigurationProvider &) -> IConfigurationProvider &=default
auto operator=(IConfigurationProvider &&) -> IConfigurationProvider &=default
auto ValidateAll() const -> Status
Validates all current values against their validators.
Definition interface.h:78
auto Get() const -> typename S::value_type
Gets the value for a setting type.
Definition interface.h:34
IConfigurationProvider(IConfigurationProvider &&)=default
auto IsOverridden() const -> bool
Reports whether an environment variable is overriding a setting.
Definition interface.h:60
Schema schema_type
Definition interface.h:22
auto Save() const -> Status
Saves the current configuration to the file.
Definition interface.h:72
A lightweight status object carrying an error code and message.
Definition status.h:25
Adapts a configuration provider to the type-erased interface.
Definition interface.h:146
auto GetFilePath() const -> std::string_view override
Returns the file path.
Definition interface.h:157
auto Load() -> Status override
Loads configuration from the file.
Definition interface.h:153
auto ValidateAll() const -> Status override
Validates all current values.
Definition interface.h:159
auto GetDiffString() const -> std::string override
Gets a string representation of the diff.
Definition interface.h:161
VirtualConfigAdapter(ConfigT &config)
Definition interface.h:148
auto Save() const -> Status override
Saves the current configuration to the file.
Definition interface.h:155
C++20 compile-time type-safe configuration library.
Definition conf.h:17