chromium/gin/data_object_builder.h

// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef GIN_DATA_OBJECT_BUILDER_H_
#define GIN_DATA_OBJECT_BUILDER_H_

#include <string_view>
#include <utility>

#include "base/check.h"
#include "base/memory/raw_ptr.h"
#include "gin/converter.h"
#include "gin/gin_export.h"
#include "v8/include/v8-forward.h"
#include "v8/include/v8-object.h"

namespace gin {

// Constructs a JavaScript object with a series of data properties.
// (As with default data properties in JavaScript, these properties are
// configurable, writable and enumerable.)
//
// Values are automatically converted using gin::Converter, though if
// using a type where the conversion may fail, callers must convert ahead of
// time.
//
// This class avoids the pitfall of using v8::Object::Set, which may invoke
// setters on the object prototype.
//
// Expected usage:
// v8::Local<v8::Object> object = gin::DataObjectBuilder(isolate)
//     .Set("boolean", true)
//     .Set("integer", 42)
//     .Build();
//
// Because this builder class contains local handles, callers must ensure it
// does not outlive the scope in which it is created.
class GIN_EXPORT DataObjectBuilder {};

}  // namespace gin

#endif  // GIN_DATA_OBJECT_BUILDER_H_