// // This file is part of Kepka, // an unofficial desktop version of Telegram messaging app, // see https://github.com/procxx/kepka // // Kepka is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // It is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // In addition, as a special exception, the copyright holders give permission // to link the code of portions of this program with the OpenSSL library. // // Full license: https://github.com/procxx/kepka/blob/master/LICENSE // Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org // Copyright (c) 2017- Kepka Contributors, https://github.com/procxx // #pragma once #include #include namespace codegen { namespace common { // Common error codes. constexpr int kErrorFileNotFound = 101; constexpr int kErrorFileTooLarge = 102; constexpr int kErrorFileNotOpened = 103; constexpr int kErrorUnexpectedEndOfFile = 104; // Wrapper around std::ostream that adds '\n' to the end of the logging line. class LogStream { public: enum NullType { Null, }; explicit LogStream(NullType) : final_(false) {} explicit LogStream(std::ostream &stream) : stream_(&stream) {} LogStream(LogStream &&other) : stream_(other.stream_) , final_(other.final_) { other.final_ = false; } std::ostream *stream() const { return stream_; } ~LogStream() { if (final_) { *stream_ << '\n'; } } private: std::ostream *stream_ = nullptr; bool final_ = true; }; template LogStream operator<<(LogStream &&stream, T &&value) { if (auto ostream = stream.stream()) { *ostream << std::forward(value); } return std::forward(stream); } // Outputs file name, line number and error code to std::err. Usage: // logError(kErrorFileTooLarge, filepath) << "file too large, size=" << size; LogStream logError(int code, const QString &filepath, int line = 0); void logSetWorkingPath(const QString &workingpath); static constexpr int kErrorInternal = 666; } // namespace common } // namespace codegen