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
55 [[nodiscard]] auto Load() -> Status { return static_cast<Derived*>(this)->LoadImpl(); }
56
58 [[nodiscard]] auto Save() const -> Status { return static_cast<const Derived*>(this)->SaveImpl(); }
59
61 [[nodiscard]] auto Diff() const -> ConfigDiff { return static_cast<const Derived*>(this)->DiffImpl(); }
62
64 [[nodiscard]] auto ValidateAll() const -> Status
65 {
66 return static_cast<const Derived*>(this)->ValidateAllImpl();
67 }
68
70 [[nodiscard]] auto GetFilePath() const -> std::string_view
71 {
72 return static_cast<const Derived*>(this)->GetFilePathImpl();
73 }
74
75protected:
82};
83
90public:
91 virtual ~IConfigurationProviderVirtual() = default;
92
94 [[nodiscard]] virtual auto Load() -> Status = 0;
95
97 [[nodiscard]] virtual auto Save() const -> Status = 0;
98
100 [[nodiscard]] virtual auto GetFilePath() const -> std::string_view = 0;
101
103 [[nodiscard]] virtual auto ValidateAll() const -> Status = 0;
104
106 [[nodiscard]] virtual auto GetDiffString() const -> std::string = 0;
107
108protected:
114};
115
116} // namespace cppfig
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
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
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