| // 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_ |