| // 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_INTERFACE_H_ |
| #define CHROMEOS_DBUS_BINDINGS_INTERFACE_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| namespace chromeos_dbus_bindings { |
| |
| // Note that we'll denote any type that starts with ^ as a protobuf class. |
| // For example: "^FrobinateReply" is the protobuf class FrobinateReply. |
| // Also note that "^" for DBus type is reserved for implementation use, |
| // so we are free to use it. |
| #define DBUS_TYPE_CHROMEOS_PROTOBUF ((int)'^') |
| constexpr char kProtobufType[] = {DBUS_TYPE_CHROMEOS_PROTOBUF, '\0'}; |
| |
| struct Interface { |
| struct Argument { |
| Argument(const std::string& name_in, const std::string& type_in) |
| : name(name_in), type(type_in) {} |
| std::string name; |
| std::string type; |
| }; |
| struct Method { |
| enum class Kind { kSimple, kNormal, kAsync, kRaw }; |
| Method(const std::string& name_in, |
| const std::vector<Argument>& input_arguments_in, |
| const std::vector<Argument>& output_arguments_in) |
| : name(name_in), |
| input_arguments(input_arguments_in), |
| output_arguments(output_arguments_in) {} |
| Method(const std::string& name_in, |
| const std::vector<Argument>& input_arguments_in) |
| : name(name_in), input_arguments(input_arguments_in) {} |
| explicit Method(const std::string& name_in) : name(name_in) {} |
| std::string name; |
| std::vector<Argument> input_arguments; |
| std::vector<Argument> output_arguments; |
| std::string doc_string; |
| Kind kind{Kind::kNormal}; |
| bool is_const{false}; |
| bool include_dbus_message{false}; |
| }; |
| struct Signal { |
| Signal(const std::string& name_in, |
| const std::vector<Argument>& arguments_in) |
| : name(name_in), arguments(arguments_in) {} |
| explicit Signal(const std::string& name_in) : name(name_in) {} |
| std::string name; |
| std::vector<Argument> arguments; |
| std::string doc_string; |
| }; |
| struct Property { |
| Property(const std::string& name_in, |
| const std::string& type_in, |
| const std::string& access_in) |
| : name(name_in), type(type_in), access(access_in) {} |
| std::string name; |
| std::string type; |
| std::string access; |
| std::string doc_string; |
| }; |
| |
| Interface() = default; |
| Interface(const std::string& name_in, |
| const std::vector<Method>& methods_in, |
| const std::vector<Signal>& signals_in, |
| const std::vector<Property>& properties_in) |
| : name(name_in), |
| methods(methods_in), |
| signals(signals_in), |
| properties(properties_in) {} |
| std::string name; |
| std::string path; |
| std::vector<Method> methods; |
| std::vector<Signal> signals; |
| std::vector<Property> properties; |
| std::string doc_string; |
| }; |
| |
| } // namespace chromeos_dbus_bindings |
| |
| #endif // CHROMEOS_DBUS_BINDINGS_INTERFACE_H_ |