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));
55 [[nodiscard]]
auto Load() ->
Status {
return static_cast<Derived*
>(
this)->LoadImpl(); }
58 [[nodiscard]]
auto Save() const ->
Status {
return static_cast<const Derived*
>(
this)->SaveImpl(); }
61 [[nodiscard]]
auto Diff() const ->
ConfigDiff {
return static_cast<const Derived*
>(
this)->DiffImpl(); }
66 return static_cast<const Derived*
>(
this)->ValidateAllImpl();
72 return static_cast<const Derived*
>(
this)->GetFilePathImpl();
100 [[nodiscard]] virtual auto
GetFilePath() const -> std::string_view = 0;
Result of comparing two configurations.
Definition diff.h:39
Virtual interface for type-erased configuration access.
Definition interface.h:89
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:70
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:61
~IConfigurationProvider()=default
auto Load() -> Status
Loads configuration from the file.
Definition interface.h:55
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:64
IConfigurationProvider()=default
auto Get() const -> typename S::value_type
Gets the value for a setting type.
Definition interface.h:34
IConfigurationProvider(IConfigurationProvider &&)=default
Schema schema_type
Definition interface.h:22
auto Save() const -> Status
Saves the current configuration to the file.
Definition interface.h:58
A lightweight status object carrying an error code and message.
Definition status.h:23
C++20 compile-time type-safe configuration library.
Definition conf.h:13