19template <
typename Derived,
typename Schema>
32 template <IsSetting S>
33 requires(Schema::template has_setting<S>)
34 [[nodiscard]]
auto Get()
const ->
typename S::value_type
36 return static_cast<const Derived*
>(
this)->
template GetImpl<S>();
44 template <IsSetting S>
45 requires(Schema::template has_setting<S>)
48 return static_cast<Derived*
>(
this)->
template SetImpl<S>(std::move(value));
58 template <IsSetting S>
59 requires(Schema::template has_setting<S>)
62 return static_cast<const Derived*
>(
this)->
template IsOverriddenImpl<S>();
69 [[nodiscard]]
auto Load() ->
Status {
return static_cast<Derived*
>(
this)->LoadImpl(); }
72 [[nodiscard]]
auto Save() const ->
Status {
return static_cast<const Derived*
>(
this)->SaveImpl(); }
75 [[nodiscard]]
auto Diff() const ->
ConfigDiff {
return static_cast<const Derived*
>(
this)->DiffImpl(); }
80 return static_cast<const Derived*
>(
this)->ValidateAllImpl();
86 return static_cast<const Derived*
>(
this)->GetFilePathImpl();
114 [[nodiscard]] virtual auto
GetFilePath() const -> std::string_view = 0;
145template <typename ConfigT>
153 [[nodiscard]]
auto Load() ->
Status override {
return config_->Load(); }
155 [[nodiscard]]
auto Save() const ->
Status override {
return config_->Save(); }
157 [[nodiscard]]
auto GetFilePath() const -> std::string_view
override {
return config_->GetFilePath(); }
161 [[nodiscard]]
auto GetDiffString() const -> std::
string override {
return config_->Diff().ToString(); }
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
~IConfigurationProvider()=default
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
IConfigurationProvider()=default
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