#include "image_io/base/message_writer.h" #include #include #include namespace photos_editing_formats { namespace image_io { using std::string; using std::stringstream; string MessageWriter::GetFormattedMessage(const Message& message) const { stringstream message_stream; auto type = message.GetType(); if (type != Message::kStatus) { message_stream << GetTypeCategory(type) << ":"; } if (type == Message::kInternalError || type == Message::kStdLibError) { message_stream << GetTypeDescription(type, message.GetSystemErrno()) << ":"; } message_stream << message.GetText(); return message_stream.str(); } string MessageWriter::GetTypeCategory(Message::Type type) const { string category; switch (type) { case Message::kStatus: category = "STATUS"; break; case Message::kWarning: category = "WARNING"; break; case Message::kStdLibError: case Message::kPrematureEndOfDataError: case Message::kStringNotFoundError: case Message::kDecodingError: case Message::kSyntaxError: case Message::kValueError: case Message::kInternalError: category = "ERROR"; break; } return category; } string MessageWriter::GetTypeDescription(Message::Type type, int system_errno) const { string description; switch (type) { case Message::kStatus: break; case Message::kWarning: break; case Message::kStdLibError: description = system_errno > 0 ? std::strerror(system_errno) : "Unknown"; break; case Message::kPrematureEndOfDataError: description = "Premature end of data"; break; case Message::kStringNotFoundError: description = "String not found"; break; case Message::kDecodingError: description = "Decoding error"; break; case Message::kSyntaxError: description = "Syntax error"; break; case Message::kValueError: description = "Value error"; break; case Message::kInternalError: description = "Internal error"; break; } return description; } } // namespace image_io } // namespace photos_editing_formats