69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
// Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef LIBBRILLO_BRILLO_DBUS_INTROSPECTABLE_HELPER_H_
|
|
#define LIBBRILLO_BRILLO_DBUS_INTROSPECTABLE_HELPER_H_
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <brillo/brillo_export.h>
|
|
#include <brillo/dbus/dbus_method_response.h>
|
|
#include <brillo/dbus/dbus_object.h>
|
|
|
|
namespace brillo {
|
|
namespace dbus_utils {
|
|
|
|
// Note that brillo/dbus/dbus_object.h include files that include this file, so
|
|
// we'll need this forward declaration.
|
|
// class DBusObject;
|
|
|
|
// This is a helper class that is used for creating the DBus Introspectable
|
|
// Interface. Each of the interfaces that is exported under a DBus Object will
|
|
// add its dbus interface introspection XML to this class, and then the user of
|
|
// this class will call RegisterWithDBusObject on the DBus object. Then this
|
|
// class can be freed. Note that this class is usually used in conjunction with
|
|
// the chromeos-dbus-bindings tool. Simply pass the string returned by
|
|
// GetIntrospectionXML() of the generated adaptor. Usage example:
|
|
// {
|
|
// IntrospectableInterfaceHelper helper;
|
|
// helper.AddInterfaceXML("<interface...> ...</interface>");
|
|
// helper.AddInterfaceXML("<interface...> ...</interface>");
|
|
// helper.AddInterfaceXML(XXXAdaptor::GetIntrospect());
|
|
// helper.RegisterWithDBusObject(object);
|
|
// }
|
|
class BRILLO_EXPORT IntrospectableInterfaceHelper {
|
|
public:
|
|
IntrospectableInterfaceHelper() = default;
|
|
|
|
// Add the Introspection XML for an interface to this class. The |xml| string
|
|
// should contain an interface XML tag and its content.
|
|
void AddInterfaceXml(std::string xml);
|
|
|
|
// Register the Introspectable Interface with a DBus object. Note that this
|
|
// class can be freed after registering with DBus object.
|
|
void RegisterWithDBusObject(DBusObject* object);
|
|
|
|
private:
|
|
// Internal alias for convenience.
|
|
using StringResponse = std::unique_ptr<DBusMethodResponse<std::string>>;
|
|
using IntrospectCallback = base::Callback<void(StringResponse)>;
|
|
|
|
// Create the method handler for Introspect method call.
|
|
IntrospectCallback GetHandler();
|
|
|
|
// Get the complete introspection XML.
|
|
std::string GetXmlString();
|
|
|
|
// Stores the list of introspection XMLs for each of the interfaces that was
|
|
// added to this class.
|
|
std::vector<std::string> interface_xmls;
|
|
};
|
|
|
|
} // namespace dbus_utils
|
|
} // namespace brillo
|
|
|
|
#endif // LIBBRILLO_BRILLO_DBUS_INTROSPECTABLE_HELPER_H_
|