#pragma once #include namespace logger { /** * @brief Представляет уровень логирования. * * Экземпляры класса создаются только через статические фабричные методы. */ class LogLevel { public: /** * @brief Создает уровень Debug. */ static LogLevel debug() { return LogLevel(Type::Debug); } /** * @brief Создает уровень Info. */ static LogLevel info() { return LogLevel(Type::Info); } /** * @brief Создает уровень Error. */ static LogLevel error() { return LogLevel(Type::Error); } /** * @brief Возвращает строковое представление уровня. * * @return "DEBUG", "INFO" или "ERROR". */ [[nodiscard]] std::string_view toString() const { switch (type_) { case Type::Debug: return "DEBUG"; case Type::Info: return "INFO"; case Type::Error: return "ERROR"; } return "UNKNOWN"; } /** * @brief Сравнивает два уровня логирования. */ [[nodiscard]] bool operator==(const LogLevel &other) const { return type_ == other.type_; } /** * @brief Сравнивает два уровня логирования. */ [[nodiscard]] bool operator!=(const LogLevel &other) const { return !(*this == other); } private: enum class Type { Debug, Info, Error }; explicit LogLevel(Type type) : type_(type) {} private: Type type_; }; } // namespace logger