blob: 260cb3d2cd9a696b9efcb4b49bebb4091732fc15 [file] [log] [blame]
// 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.
#include "buffet/commands/command_definition.h"
#include <vector>
#include <chromeos/errors/error.h>
#include <chromeos/strings/string_utils.h>
#include "buffet/commands/schema_constants.h"
namespace buffet {
bool CommandDefinition::Visibility::FromString(const std::string& str,
chromeos::ErrorPtr* error) {
// This special case is useful for places where we want to make a command
// to ALL clients, even if new clients are added in the future.
if (str == commands::attributes::kCommand_Visibility_All) {
local = true;
cloud = true;
return true;
}
// Clear any bits first.
local = false;
cloud = false;
if (str == commands::attributes::kCommand_Visibility_None)
return true;
for (const std::string& value : chromeos::string_utils::Split(str, ",")) {
if (value == commands::attributes::kCommand_Visibility_Local) {
local = true;
} else if (value == commands::attributes::kCommand_Visibility_Cloud) {
cloud = true;
} else {
chromeos::Error::AddToPrintf(
error, FROM_HERE, errors::commands::kDomain,
errors::commands::kInvalidPropValue,
"Invalid command visibility value '%s'", value.c_str());
return false;
}
}
return true;
}
std::string CommandDefinition::Visibility::ToString() const {
if (local && cloud)
return commands::attributes::kCommand_Visibility_All;
if (!local && !cloud)
return commands::attributes::kCommand_Visibility_None;
if (local)
return commands::attributes::kCommand_Visibility_Local;
return commands::attributes::kCommand_Visibility_Cloud;
}
CommandDefinition::CommandDefinition(
const std::string& category,
std::unique_ptr<const ObjectSchema> parameters,
std::unique_ptr<const ObjectSchema> progress,
std::unique_ptr<const ObjectSchema> results)
: category_{category},
parameters_{std::move(parameters)},
progress_{std::move(progress)},
results_{std::move(results)} {
// Set to be available to all clients by default.
visibility_ = Visibility::GetAll();
}
void CommandDefinition::SetVisibility(const Visibility& visibility) {
visibility_ = visibility;
}
} // namespace buffet