// Copyright 2014 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 CHROMEOS_DBUS_BINDINGS_NAME_PARSER_H_ #define CHROMEOS_DBUS_BINDINGS_NAME_PARSER_H_ #include <string> #include <vector> #include <base/macros.h> namespace chromeos_dbus_bindings { struct Interface; class IndentedText; // A helper class that allows to decompose D-Bus name strings such as // "org.chromium.TestInterface" into components and be able to construct the // corresponding C++ identifiers, namespaces, variable names, etc. class NameParser { public: explicit NameParser(const std::string& name); // Returns fully-qualified C++ type name for the current D-Bus name // for example "org::chromium::TestInterface". std::string MakeFullCppName() const; // Returns a variable name suitable for object of this type. // For example "test_interface". std::string MakeVariableName() const; // Returns a name of an interface for the given type, optionally qualifying // it with the C++ namespaces. std::string MakeInterfaceName(bool fully_qualified) const; // Returns a name of a proxy class for the given type, optionally qualifying // it with the C++ namespaces. std::string MakeProxyName(bool fully_qualified) const; // Returns a name of an adaptor class for the given type, optionally // qualifying it with the C++ namespaces. std::string MakeAdaptorName(bool fully_qualified) const; // Adds opening "namespace ... {" statements to |text|. // If |add_main_type| is true, adds the main type name as a namespace as well. void AddOpenNamespaces(IndentedText *text, bool add_main_type) const; // Adds closing "} // namespace ..." statements to |text|. // If |add_main_type| is true, adds the main type name as a namespace as well. void AddCloseNamespaces(IndentedText *text, bool add_main_type) const; std::string type_name; // e.g. "TestInterface". std::vector<std::string> namespaces; // e.g. {"org", "chromium"}. private: // Helper function to prepend the C++ namespaces to the |name|. std::string MakeFullyQualified(const std::string& name) const; }; } // namespace chromeos_dbus_bindings #endif // CHROMEOS_DBUS_BINDINGS_NAME_PARSER_H_