Index: extensions/renderer/argument_spec_builder.cc |
diff --git a/extensions/renderer/argument_spec_builder.cc b/extensions/renderer/argument_spec_builder.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..142c77588f71c5d57ef13d7ad72132d92c1369f8 |
--- /dev/null |
+++ b/extensions/renderer/argument_spec_builder.cc |
@@ -0,0 +1,78 @@ |
+// Copyright 2017 The Chromium 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 "extensions/renderer/argument_spec_builder.h" |
+ |
+#include "base/memory/ptr_util.h" |
+ |
+namespace extensions { |
+ |
+ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type) |
+ : ArgumentSpecBuilder(type, base::StringPiece()) {} |
+ |
+ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type, |
+ base::StringPiece name) |
+ : spec_(base::MakeUnique<ArgumentSpec>(type)) { |
+ if (!name.empty()) |
+ spec_->set_name(name); |
+} |
+ |
+ArgumentSpecBuilder::~ArgumentSpecBuilder() {} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::MakeOptional() { |
+ spec_->set_optional(true); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::AddProperty( |
+ base::StringPiece property_name, |
+ std::unique_ptr<ArgumentSpec> property_spec) { |
+ properties_[property_name.as_string()] = std::move(property_spec); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetMinimum(int minimum) { |
+ spec_->set_minimum(minimum); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetListType( |
+ std::unique_ptr<ArgumentSpec> list_type) { |
+ spec_->set_list_element_type(std::move(list_type)); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetRef(base::StringPiece ref) { |
+ spec_->set_ref(ref); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetChoices( |
+ std::vector<std::unique_ptr<ArgumentSpec>> choices) { |
+ spec_->set_choices(std::move(choices)); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetEnums( |
+ std::set<std::string> enum_values) { |
+ spec_->set_enum_values(std::move(enum_values)); |
+ return *this; |
+} |
+ |
+ArgumentSpecBuilder& ArgumentSpecBuilder::SetAdditionalProperties( |
+ std::unique_ptr<ArgumentSpec> additional_properties) { |
+ spec_->set_additional_properties(std::move(additional_properties)); |
+ return *this; |
+} |
+ |
+std::unique_ptr<ArgumentSpec> ArgumentSpecBuilder::Build() { |
+ spec_->set_properties(std::move(properties_)); |
+ return std::move(spec_); |
+} |
+ |
+ArgumentSpecBuilder::operator std::unique_ptr<ArgumentSpec>() { |
+ return Build(); |
+} |
+ |
+} // namespace extensions |