libvintf: use toFQNameString
Centralize the hard-coded "@" "::" "/".
Test: builds
Test: libvintf_test
Test: vintf_object_test
Change-Id: I1942441865585b11801e7d9b38c0c57b5c5ebe17
diff --git a/parse_string.cpp b/parse_string.cpp
index beca23b..2aa3c1b 100644
--- a/parse_string.cpp
+++ b/parse_string.cpp
@@ -401,7 +401,7 @@
for (const auto& interface : iterateValues(req.interfaces)) {
for (const auto& instance : interface.instances) {
if (!first) s += " AND ";
- s += "@" + to_string(vr) + "::" + interface.name + "/" + instance;
+ s += toFQNameString(vr, interface.name, instance);
first = false;
}
}
@@ -470,5 +470,40 @@
return oss.str();
}
+std::string toFQNameString(const std::string& package, const std::string& version,
+ const std::string& interface, const std::string& instance) {
+ std::stringstream ss;
+ ss << package << "@" << version;
+ if (!interface.empty()) {
+ ss << "::" << interface;
+ if (!instance.empty()) {
+ ss << "/" << instance;
+ }
+ }
+ return ss.str();
+}
+
+std::string toFQNameString(const std::string& package, const Version& version,
+ const std::string& interface, const std::string& instance) {
+ return toFQNameString(package, to_string(version), interface, instance);
+}
+
+std::string toFQNameString(const Version& version, const std::string& interface,
+ const std::string& instance) {
+ return toFQNameString("", version, interface, instance);
+}
+
+// android.hardware.foo@1.0-1::IFoo/default.
+// Note that the format is extended to support a range of versions.
+std::string toFQNameString(const std::string& package, const VersionRange& range,
+ const std::string& interface, const std::string& instance) {
+ return toFQNameString(package, to_string(range), interface, instance);
+}
+
+std::string toFQNameString(const VersionRange& range, const std::string& interface,
+ const std::string& instance) {
+ return toFQNameString("", range, interface, instance);
+}
+
} // namespace vintf
} // namespace android