xref: /aosp_15_r20/external/image_io/src/base/message_writer.cc (revision ca0779eb572efbbfda2e47f806647c3c7eeea8c3)
1*ca0779ebSJerome Gaillard #include "image_io/base/message_writer.h"
2*ca0779ebSJerome Gaillard 
3*ca0779ebSJerome Gaillard #include <cstring>
4*ca0779ebSJerome Gaillard #include <sstream>
5*ca0779ebSJerome Gaillard #include <string>
6*ca0779ebSJerome Gaillard 
7*ca0779ebSJerome Gaillard namespace photos_editing_formats {
8*ca0779ebSJerome Gaillard namespace image_io {
9*ca0779ebSJerome Gaillard 
10*ca0779ebSJerome Gaillard using std::string;
11*ca0779ebSJerome Gaillard using std::stringstream;
12*ca0779ebSJerome Gaillard 
GetFormattedMessage(const Message & message) const13*ca0779ebSJerome Gaillard string MessageWriter::GetFormattedMessage(const Message& message) const {
14*ca0779ebSJerome Gaillard   stringstream message_stream;
15*ca0779ebSJerome Gaillard   auto type = message.GetType();
16*ca0779ebSJerome Gaillard   if (type != Message::kStatus) {
17*ca0779ebSJerome Gaillard     message_stream << GetTypeCategory(type) << ":";
18*ca0779ebSJerome Gaillard   }
19*ca0779ebSJerome Gaillard   if (type == Message::kInternalError || type == Message::kStdLibError) {
20*ca0779ebSJerome Gaillard     message_stream << GetTypeDescription(type, message.GetSystemErrno()) << ":";
21*ca0779ebSJerome Gaillard   }
22*ca0779ebSJerome Gaillard   message_stream << message.GetText();
23*ca0779ebSJerome Gaillard   return message_stream.str();
24*ca0779ebSJerome Gaillard }
25*ca0779ebSJerome Gaillard 
GetTypeCategory(Message::Type type) const26*ca0779ebSJerome Gaillard string MessageWriter::GetTypeCategory(Message::Type type) const {
27*ca0779ebSJerome Gaillard   string category;
28*ca0779ebSJerome Gaillard   switch (type) {
29*ca0779ebSJerome Gaillard     case Message::kStatus:
30*ca0779ebSJerome Gaillard       category = "STATUS";
31*ca0779ebSJerome Gaillard       break;
32*ca0779ebSJerome Gaillard     case Message::kWarning:
33*ca0779ebSJerome Gaillard       category = "WARNING";
34*ca0779ebSJerome Gaillard       break;
35*ca0779ebSJerome Gaillard     case Message::kStdLibError:
36*ca0779ebSJerome Gaillard     case Message::kPrematureEndOfDataError:
37*ca0779ebSJerome Gaillard     case Message::kStringNotFoundError:
38*ca0779ebSJerome Gaillard     case Message::kDecodingError:
39*ca0779ebSJerome Gaillard     case Message::kSyntaxError:
40*ca0779ebSJerome Gaillard     case Message::kValueError:
41*ca0779ebSJerome Gaillard     case Message::kInternalError:
42*ca0779ebSJerome Gaillard       category = "ERROR";
43*ca0779ebSJerome Gaillard       break;
44*ca0779ebSJerome Gaillard   }
45*ca0779ebSJerome Gaillard   return category;
46*ca0779ebSJerome Gaillard }
47*ca0779ebSJerome Gaillard 
GetTypeDescription(Message::Type type,int system_errno) const48*ca0779ebSJerome Gaillard string MessageWriter::GetTypeDescription(Message::Type type,
49*ca0779ebSJerome Gaillard                                          int system_errno) const {
50*ca0779ebSJerome Gaillard   string description;
51*ca0779ebSJerome Gaillard   switch (type) {
52*ca0779ebSJerome Gaillard     case Message::kStatus:
53*ca0779ebSJerome Gaillard       break;
54*ca0779ebSJerome Gaillard     case Message::kWarning:
55*ca0779ebSJerome Gaillard       break;
56*ca0779ebSJerome Gaillard     case Message::kStdLibError:
57*ca0779ebSJerome Gaillard       description = system_errno > 0 ? std::strerror(system_errno) : "Unknown";
58*ca0779ebSJerome Gaillard       break;
59*ca0779ebSJerome Gaillard     case Message::kPrematureEndOfDataError:
60*ca0779ebSJerome Gaillard       description = "Premature end of data";
61*ca0779ebSJerome Gaillard       break;
62*ca0779ebSJerome Gaillard     case Message::kStringNotFoundError:
63*ca0779ebSJerome Gaillard       description = "String not found";
64*ca0779ebSJerome Gaillard       break;
65*ca0779ebSJerome Gaillard     case Message::kDecodingError:
66*ca0779ebSJerome Gaillard       description = "Decoding error";
67*ca0779ebSJerome Gaillard       break;
68*ca0779ebSJerome Gaillard     case Message::kSyntaxError:
69*ca0779ebSJerome Gaillard       description = "Syntax error";
70*ca0779ebSJerome Gaillard       break;
71*ca0779ebSJerome Gaillard     case Message::kValueError:
72*ca0779ebSJerome Gaillard       description = "Value error";
73*ca0779ebSJerome Gaillard       break;
74*ca0779ebSJerome Gaillard     case Message::kInternalError:
75*ca0779ebSJerome Gaillard       description = "Internal error";
76*ca0779ebSJerome Gaillard       break;
77*ca0779ebSJerome Gaillard   }
78*ca0779ebSJerome Gaillard   return description;
79*ca0779ebSJerome Gaillard }
80*ca0779ebSJerome Gaillard 
81*ca0779ebSJerome Gaillard }  // namespace image_io
82*ca0779ebSJerome Gaillard }  // namespace photos_editing_formats
83