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