Line data Source code
1 : #pragma once 2 : 3 : #include <nlohmann/json.hpp> 4 : 5 : #include "Log/ProgressLogger.hpp" 6 : 7 : namespace Log { 8 : class ProgressLoggerJsonOStream: public ProgressLogger { 9 : template<class T> 10 0 : ProgressLogger &send(const T &t) { 11 0 : if(s != TEXT) 12 0 : throw std::logic_error("Cannot send if state is not TEXT"); 13 0 : textStream << t; 14 0 : return *this; 15 : } 16 : 17 : private: 18 : std::ostream &os; 19 : 20 : bool firstField = true; 21 : 22 : enum State { 23 : NO_MESSAGE, 24 : MESSAGE, 25 : TEXT 26 : }; 27 : State s = NO_MESSAGE; 28 : 29 : std::stringstream textStream; 30 : nlohmann::json jsonMessage; 31 : 32 : public: 33 : ProgressLoggerJsonOStream(std::ostream &os = std::cout); 34 : 35 : virtual ProgressLoggerJsonOStream &operator<<(const Progress &progress); 36 : virtual ProgressLoggerJsonOStream &operator<<(const Elapsed &elapsed); 37 : virtual ProgressLoggerJsonOStream &operator<<(const ETA &eta); 38 : virtual ProgressLoggerJsonOStream &operator<<(const StartText &); 39 : virtual ProgressLoggerJsonOStream &operator<<(const EndText &); 40 : virtual ProgressLoggerJsonOStream &operator<<(const StartMessage &); 41 : virtual ProgressLoggerJsonOStream &operator<<(const EndMessage &); 42 : 43 : virtual ProgressLoggerJsonOStream &operator<<(const int &t); 44 : virtual ProgressLoggerJsonOStream &operator<<(const unsigned long &t); 45 : virtual ProgressLoggerJsonOStream &operator<<(const double &t); 46 : virtual ProgressLoggerJsonOStream &operator<<(const char *t); 47 : 48 : virtual ProgressLoggerJsonOStream &operator<<(std::_Setprecision f); 49 : 50 : protected: 51 : virtual ProgressLoggerJsonOStream &fixed(); 52 : }; 53 : 54 : } // namespace Log