Initial commit of libimage_io

Image_io is a library for manipulating image files, especially XMP
metadata within them.

Test: m libimage_io
Bug: 109735087
Bug: 119211681
Change-Id: I657f307be0459fe40154806c7cd388b97bcb0ea5
diff --git a/src/base/message_writer.cc b/src/base/message_writer.cc
new file mode 100644
index 0000000..d13dc41
--- /dev/null
+++ b/src/base/message_writer.cc
@@ -0,0 +1,62 @@
+#include "image_io/base/message_writer.h"
+
+#include <cstring>
+#include <sstream>
+#include <string>
+
+namespace photos_editing_formats {
+namespace image_io {
+
+using std::string;
+using std::stringstream;
+
+string MessageWriter::GetFormattedMessage(const Message& message) const {
+  stringstream message_stream;
+  message_stream << GetTypeCategory(message.GetType()) << ":"
+                 << GetTypeDescription(message.GetType(),
+                                       message.GetSystemErrno())
+                 << ":" << message.GetText();
+  return message_stream.str();
+}
+
+string MessageWriter::GetTypeCategory(Message::Type type) const {
+  if (type == Message::kStatus) {
+    return "STATUS";
+  } else {
+    return "ERROR";
+  }
+}
+
+string MessageWriter::GetTypeDescription(Message::Type type,
+                                         int system_errno) const {
+  string description;
+  switch (type) {
+    case Message::kStatus:
+      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