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