#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); } /** * @brief Проверяет, является ли текущий уровень менее важным. * * Используется для фильтрации сообщений: * сообщения с уровнем ниже заданного уровня Logger * не должны записываться в журнал. */ [[nodiscard]] bool operator<(const LogLevel &other) const { return static_cast(type_) < static_cast(other.type_); } private: enum class Type { Debug = 0, Info = 1, Error = 2 }; explicit LogLevel(Type type) : type_(type) {} private: Type type_; }; } // namespace logger