#pragma once #include #include #include #include #include #include "logger.h" class Printer : public Logger { public: Printer(Severity severity = Severity::info); virtual void log(const std::list& comments, bool colored = true) const override; virtual void log(Severity severity, const std::string& comment, bool colored = true) const override; virtual void setSeverity(Severity severity) override; virtual Severity getSeverity() const override; void setStatusMessage(const std::string& message); void clearStatusMessage(); void printNested( const std::string& header, const std::vector& lines = {}, const std::list& comments = {}, const std::optional& status = std::nullopt ); private: void printMessage(const Message& message, bool colored = false) const; void finishPrint(bool colored = false) const; private: std::atomic severity; mutable std::mutex mutex; std::optional status; };