| // 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 "src/commands/object_schema.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: | |
| struct Visibility { | |
| Visibility() = default; | |
| Visibility(bool is_local, bool is_cloud) | |
| : local{is_local}, cloud{is_cloud} {} | |
| // Converts a comma-separated string of visibility identifiers into the | |
| // Visibility bitset (|str| is a string like "local,cloud"). | |
| // Special string value "all" is treated as a list of every possible | |
| // visibility values and "none" to have all the bits cleared. | |
| bool FromString(const std::string& str, ErrorPtr* error); | |
| // Converts the visibility bitset to a string. | |
| std::string ToString() const; | |
| static Visibility GetAll() { return Visibility{true, true}; } | |
| static Visibility GetLocal() { return Visibility{true, false}; } | |
| static Visibility GetCloud() { return Visibility{false, true}; } | |
| static Visibility GetNone() { return Visibility{false, false}; } | |
| bool local{false}; // Command is available to local clients. | |
| bool cloud{false}; // Command is available to cloud clients. | |
| }; | |
| CommandDefinition(std::unique_ptr<const ObjectSchema> parameters, | |
| std::unique_ptr<const ObjectSchema> progress, | |
| std::unique_ptr<const ObjectSchema> results); | |
| // Gets the object schema for command parameters. | |
| const ObjectSchema* GetParameters() const { return parameters_.get(); } | |
| // Gets the object schema for command progress. | |
| const ObjectSchema* GetProgress() const { return progress_.get(); } | |
| // Gets the object schema for command results. | |
| const ObjectSchema* GetResults() const { return results_.get(); } | |
| // Returns the command visibility. | |
| const Visibility& GetVisibility() const { return visibility_; } | |
| // Changes the command visibility. | |
| void SetVisibility(const Visibility& visibility); | |
| // Returns the role required to execute command. | |
| UserRole GetMinimalRole() const { return minimal_role_; } | |
| // Changes the role required to execute command. | |
| void SetMinimalRole(UserRole minimal_role) { minimal_role_ = minimal_role; } | |
| private: | |
| std::unique_ptr<const ObjectSchema> parameters_; // Command parameters def. | |
| std::unique_ptr<const ObjectSchema> progress_; // Command progress def. | |
| std::unique_ptr<const ObjectSchema> results_; // Command results def. | |
| Visibility visibility_; // Available to all by default. | |
| // Minimal role required to execute command. | |
| UserRole minimal_role_{UserRole::kUser}; | |
| DISALLOW_COPY_AND_ASSIGN(CommandDefinition); | |
| }; | |
| } // namespace weave | |
| #endif // LIBWEAVE_SRC_COMMANDS_COMMAND_DEFINITION_H_ |