argument_spec_builder.cc 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. #include "extensions/renderer/bindings/argument_spec_builder.h"
  5. #include "base/strings/string_piece.h"
  6. namespace extensions {
  7. ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type)
  8. : ArgumentSpecBuilder(type, base::StringPiece()) {}
  9. ArgumentSpecBuilder::ArgumentSpecBuilder(ArgumentType type,
  10. base::StringPiece name)
  11. : spec_(std::make_unique<ArgumentSpec>(type)) {
  12. if (!name.empty())
  13. spec_->set_name(name);
  14. }
  15. ArgumentSpecBuilder::~ArgumentSpecBuilder() {}
  16. ArgumentSpecBuilder& ArgumentSpecBuilder::MakeOptional() {
  17. spec_->set_optional(true);
  18. return *this;
  19. }
  20. ArgumentSpecBuilder& ArgumentSpecBuilder::AddProperty(
  21. base::StringPiece property_name,
  22. std::unique_ptr<ArgumentSpec> property_spec) {
  23. properties_[std::string(property_name)] = std::move(property_spec);
  24. return *this;
  25. }
  26. ArgumentSpecBuilder& ArgumentSpecBuilder::SetMinimum(int minimum) {
  27. spec_->set_minimum(minimum);
  28. return *this;
  29. }
  30. ArgumentSpecBuilder& ArgumentSpecBuilder::SetListType(
  31. std::unique_ptr<ArgumentSpec> list_type) {
  32. spec_->set_list_element_type(std::move(list_type));
  33. return *this;
  34. }
  35. ArgumentSpecBuilder& ArgumentSpecBuilder::SetRef(base::StringPiece ref) {
  36. spec_->set_ref(ref);
  37. return *this;
  38. }
  39. ArgumentSpecBuilder& ArgumentSpecBuilder::SetChoices(
  40. std::vector<std::unique_ptr<ArgumentSpec>> choices) {
  41. spec_->set_choices(std::move(choices));
  42. return *this;
  43. }
  44. ArgumentSpecBuilder& ArgumentSpecBuilder::SetEnums(
  45. std::set<std::string> enum_values) {
  46. spec_->set_enum_values(std::move(enum_values));
  47. return *this;
  48. }
  49. ArgumentSpecBuilder& ArgumentSpecBuilder::SetAdditionalProperties(
  50. std::unique_ptr<ArgumentSpec> additional_properties) {
  51. spec_->set_additional_properties(std::move(additional_properties));
  52. return *this;
  53. }
  54. ArgumentSpecBuilder& ArgumentSpecBuilder::SetInstanceOf(
  55. std::string instance_of) {
  56. spec_->set_instance_of(std::move(instance_of));
  57. return *this;
  58. }
  59. ArgumentSpecBuilder& ArgumentSpecBuilder::PreserveNull() {
  60. spec_->set_preserve_null(true);
  61. return *this;
  62. }
  63. std::unique_ptr<ArgumentSpec> ArgumentSpecBuilder::Build() {
  64. spec_->set_properties(std::move(properties_));
  65. return std::move(spec_);
  66. }
  67. } // namespace extensions