// 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 BUFFET_COMMANDS_COMMAND_DEFINITION_H_
#define BUFFET_COMMANDS_COMMAND_DEFINITION_H_

#include <memory>
#include <string>

#include <base/basictypes.h>

#include "buffet/commands/object_schema.h"

namespace buffet {

// A simple GCD command definition. This class contains the command category
// and a full object schema describing the command parameter types and
// constraints. See comments for CommandDefinitions::LoadCommands for the
// detailed description of what command categories are and what they are used
// for.
class CommandDefinition {
 public:
  CommandDefinition(const std::string& category,
                    const std::shared_ptr<const ObjectSchema>& parameters);

  // Gets the category this command belongs to.
  const std::string& GetCategory() const { return category_; }
  // Gets the object schema for command parameters.
  const std::shared_ptr<const ObjectSchema>& GetParameters() const {
    return parameters_;
  }

 private:
  std::string category_;  // Cmd category. Could be "powerd" for "base.reboot".
  std::shared_ptr<const ObjectSchema> parameters_;  // Command parameter def.
  DISALLOW_COPY_AND_ASSIGN(CommandDefinition);
};

}  // namespace buffet

#endif  // BUFFET_COMMANDS_COMMAND_DEFINITION_H_
