#pragma once #include "isolate/class_handle.h" #include "isolate/transferable.h" #include #include namespace ivm { class TransferableHandle : public ClassHandle { public: static auto Definition() -> v8::Local { return MakeClass("Transferable", nullptr); } virtual auto TransferOut() -> std::unique_ptr = 0; }; class TransferOptions { public: enum class Type { None, Copy, ExternalCopy, Reference, DeepReference }; TransferOptions() = default; explicit TransferOptions(Type fallback) : fallback{fallback} {}; explicit TransferOptions(v8::Local options, Type fallback = Type::None); explicit TransferOptions(v8::MaybeLocal maybe_options, Type fallback = Type::None); auto operator==(const TransferOptions& that) const -> bool { return type == that.type && fallback == that.fallback && promise == that.promise; } Type type = Type::None; Type fallback = Type::None; bool promise = false; private: void ParseOptions(v8::Local options); }; auto OptionalTransferOut(v8::Local value, TransferOptions options = {}) -> std::unique_ptr; auto TransferOut(v8::Local value, TransferOptions options = {}) -> std::unique_ptr; } // namespace ivm