65 */ |
65 */ |
66 static std::string c2x(cbor_data value, uint64_t length) { |
66 static std::string c2x(cbor_data value, uint64_t length) { |
67 return value && length > 0 ? std::string((const char*) value, length) : ""; |
67 return value && length > 0 ? std::string((const char*) value, length) : ""; |
68 } |
68 } |
69 |
69 |
70 const Glib::ustring c2xname(cbor_data value, uint64_t length) { |
|
71 return nameCodec.encode(c2x(value, length)); |
|
72 } |
|
73 |
|
74 xmlpp::Element* parentOrSelf(xmlpp::Element* current) { |
70 xmlpp::Element* parentOrSelf(xmlpp::Element* current) { |
75 return current->get_parent() == nullptr ? current : current->get_parent(); |
71 return current->get_parent() == nullptr ? current : current->get_parent(); |
76 } |
72 } |
77 |
73 |
78 void checkRemainingItems() { |
74 void checkRemainingItems() { |
85 } |
81 } |
86 |
82 |
87 void appendScalarValue(Glib::ustring value, Glib::ustring cborType, bool isNull = false) { |
83 void appendScalarValue(Glib::ustring value, Glib::ustring cborType, bool isNull = false) { |
88 // TODO: null |
84 // TODO: null |
89 if (mode.back() == Mode::ARRAY) { |
85 if (mode.back() == Mode::ARRAY) { |
90 xmlpp::Element* element = current->add_child(itemName); |
86 xmlpp::Element* element = current->add_child(nameCodec.encode(itemName)); |
91 element->add_child_text(value); |
87 element->add_child_text(value); |
92 element->set_attribute("value-type", cborType); |
88 element->set_attribute("value-type", cborType); |
93 } else if (mode.back() == Mode::MAP_KEY) { |
89 } else if (mode.back() == Mode::MAP_KEY) { |
94 current = current->add_child(value); |
90 current = current->add_child(nameCodec.encode(value)); |
95 current->set_attribute("key-type", cborType); |
91 current->set_attribute("key-type", cborType); |
96 mode.push_back(Mode::MAP_VALUE); |
92 mode.push_back(Mode::MAP_VALUE); |
97 } else if (mode.back() == Mode::MAP_VALUE) { |
93 } else if (mode.back() == Mode::MAP_VALUE) { |
98 current->add_child_text(value); |
94 current->add_child_text(value); |
99 current->set_attribute("value-type", cborType); |
95 current->set_attribute("value-type", cborType); |
124 } |
120 } |
125 |
121 |
126 void mapStart(ssize_t size) { |
122 void mapStart(ssize_t size) { |
127 if (mode.back() == Mode::ROOT) { |
123 if (mode.back() == Mode::ROOT) { |
128 } else if (mode.back() == Mode::ARRAY) { |
124 } else if (mode.back() == Mode::ARRAY) { |
129 current = current->add_child(itemName); |
125 current = current->add_child(nameCodec.encode(itemName)); |
130 current->set_attribute("value-type", "map"); |
126 current->set_attribute("value-type", "map"); |
131 } else if (mode.back() == Mode::MAP_VALUE) { |
127 } else if (mode.back() == Mode::MAP_VALUE) { |
132 mode.pop_back(); |
128 mode.pop_back(); |
133 // TODO: remainingItems |
129 // TODO: remainingItems |
134 } else { |
130 } else { |