1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "extensions/renderer/bindings/argument_spec_builder.h" 6 7 8 namespace extensions { 9 ArgumentSpecBuilder(ArgumentType type)10ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type) 11 : ArgumentSpecBuilder(type, base::StringPiece()) {} 12 ArgumentSpecBuilder(ArgumentType type,base::StringPiece name)13ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type, 14 base::StringPiece name) 15 : spec_(std::make_unique<ArgumentSpec>(type)) { 16 if (!name.empty()) 17 spec_->set_name(name); 18 } 19 ~ArgumentSpecBuilder()20ArgumentSpecBuilder::~ArgumentSpecBuilder() {} 21 MakeOptional()22ArgumentSpecBuilder& ArgumentSpecBuilder::MakeOptional() { 23 spec_->set_optional(true); 24 return *this; 25 } 26 AddProperty(base::StringPiece property_name,std::unique_ptr<ArgumentSpec> property_spec)27ArgumentSpecBuilder& ArgumentSpecBuilder::AddProperty( 28 base::StringPiece property_name, 29 std::unique_ptr<ArgumentSpec> property_spec) { 30 properties_[property_name.as_string()] = std::move(property_spec); 31 return *this; 32 } 33 SetMinimum(int minimum)34ArgumentSpecBuilder& ArgumentSpecBuilder::SetMinimum(int minimum) { 35 spec_->set_minimum(minimum); 36 return *this; 37 } 38 SetListType(std::unique_ptr<ArgumentSpec> list_type)39ArgumentSpecBuilder& ArgumentSpecBuilder::SetListType( 40 std::unique_ptr<ArgumentSpec> list_type) { 41 spec_->set_list_element_type(std::move(list_type)); 42 return *this; 43 } 44 SetRef(base::StringPiece ref)45ArgumentSpecBuilder& ArgumentSpecBuilder::SetRef(base::StringPiece ref) { 46 spec_->set_ref(ref); 47 return *this; 48 } 49 SetChoices(std::vector<std::unique_ptr<ArgumentSpec>> choices)50ArgumentSpecBuilder& ArgumentSpecBuilder::SetChoices( 51 std::vector<std::unique_ptr<ArgumentSpec>> choices) { 52 spec_->set_choices(std::move(choices)); 53 return *this; 54 } 55 SetEnums(std::set<std::string> enum_values)56ArgumentSpecBuilder& ArgumentSpecBuilder::SetEnums( 57 std::set<std::string> enum_values) { 58 spec_->set_enum_values(std::move(enum_values)); 59 return *this; 60 } 61 SetAdditionalProperties(std::unique_ptr<ArgumentSpec> additional_properties)62ArgumentSpecBuilder& ArgumentSpecBuilder::SetAdditionalProperties( 63 std::unique_ptr<ArgumentSpec> additional_properties) { 64 spec_->set_additional_properties(std::move(additional_properties)); 65 return *this; 66 } 67 SetInstanceOf(std::string instance_of)68ArgumentSpecBuilder& ArgumentSpecBuilder::SetInstanceOf( 69 std::string instance_of) { 70 spec_->set_instance_of(std::move(instance_of)); 71 return *this; 72 } 73 PreserveNull()74ArgumentSpecBuilder& ArgumentSpecBuilder::PreserveNull() { 75 spec_->set_preserve_null(true); 76 return *this; 77 } 78 Build()79std::unique_ptr<ArgumentSpec> ArgumentSpecBuilder::Build() { 80 spec_->set_properties(std::move(properties_)); 81 return std::move(spec_); 82 } 83 84 } // namespace extensions 85