blob: da02bf5fe83890c2a617cef3eb0ff4f0e78c80bf [file] [log] [blame]
// Copyright 2015 The Weave 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 LIBWEAVE_SRC_COMMANDS_COMMAND_DEFINITION_H_
#define LIBWEAVE_SRC_COMMANDS_COMMAND_DEFINITION_H_
#include <memory>
#include <string>
#include <base/macros.h>
#include <base/values.h>
#include <weave/error.h>
namespace weave {
enum class UserRole {
kViewer,
kUser,
kManager,
kOwner,
};
// A simple GCD command definition. This class contains the full object schema
// describing the command parameter types and constraints.
class CommandDefinition final {
public:
// Factory method to construct a command definition from a JSON dictionary.
static std::unique_ptr<CommandDefinition> FromJson(
const base::DictionaryValue& dict, ErrorPtr* error);
const base::DictionaryValue& ToJson() const { return definition_; }
// Returns the role required to execute command.
UserRole GetMinimalRole() const { return minimal_role_; }
private:
CommandDefinition(const base::DictionaryValue& definition,
UserRole minimal_role);
base::DictionaryValue definition_;
UserRole minimal_role_;
DISALLOW_COPY_AND_ASSIGN(CommandDefinition);
};
} // namespace weave
#endif // LIBWEAVE_SRC_COMMANDS_COMMAND_DEFINITION_H_