+
+Drive::Drive (string xml)
+{
+ cxml::Document doc;
+ doc.read_string (xml);
+ _device = doc.string_child("Device");
+ for (auto i: doc.node_children("MountPoint")) {
+ _mount_points.push_back (i->content());
+ }
+ _size = doc.number_child<uint64_t>("Size");
+ _vendor = doc.optional_string_child("Vendor");
+ _model = doc.optional_string_child("Model");
+}
+
+
+string
+Drive::as_xml () const
+{
+ xmlpp::Document doc;
+ auto root = doc.create_root_node ("Drive");
+ root->add_child("Device")->add_child_text(_device);
+ for (auto i: _mount_points) {
+ root->add_child("MountPoint")->add_child_text(i.string());
+ }
+ root->add_child("Size")->add_child_text(dcp::raw_convert<string>(_size));
+ if (_vendor) {
+ root->add_child("Vendor")->add_child_text(*_vendor);
+ }
+ if (_model) {
+ root->add_child("Model")->add_child_text(*_model);
+ }
+
+ return doc.write_to_string("UTF-8");
+}
+
+