#ifndef CONFIG_HH #define CONFIG_HH #include #include #include #include #include #include #include class Logger; class Config { public: virtual ~Config() = default; static std::unique_ptr create(Logger* logger, std::filesystem::path const& filepath); static std::unique_ptr create( std::unordered_map data, std::filesystem::path root); static std::unique_ptr create_empty(); virtual std::string_view get(std::string const& key, std::string_view default_) const = 0; virtual char const* get(std::string const& key, char const* default_) const = 0; virtual std::optional get(std::string const& key, uint64_t default_) const = 0; virtual std::optional get_size(std::string const& key, uint64_t default_) const = 0; virtual std::optional get_duration(std::string const& key, double default_) const = 0; virtual std::filesystem::path get_path(std::string const& key, std::string_view default_) const = 0; protected: Config() = default; Config(Config const&) = delete; Config& operator=(Config const&) = delete; }; #endif // CONFIG_HH