| // Copyright 2026 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. |
| |
| #ifndef TOOLS_GN_FFI_VALUE_H_ |
| #define TOOLS_GN_FFI_VALUE_H_ |
| |
| #include <memory> |
| |
| #include "cxx.h" |
| #include "gn/value.h" |
| |
| class Scope; |
| class ParseNode; |
| struct SliceAny; |
| |
| enum class ValueType : uint8_t; |
| |
| // Teach rust how to convert Value::Type to an enum that rust is aware of. |
| namespace rust { |
| ValueType cxx_to_rust(Value::Type t); |
| } |
| |
| size_t ValueSize(); |
| // SetValue* is called with potentially uninitialized Value objects. |
| // These functions roughly correspond to calling the corresponding constructor |
| // with in-place construction. |
| void SetValueNone(Value& self, const ParseNode* origin); |
| void SetValueBool(Value& self, const ParseNode* origin, bool b); |
| void SetValueInt(Value& self, const ParseNode* origin, int64_t i); |
| void SetValueString(Value& self, const ParseNode* origin, rust::Str s); |
| struct Any; |
| // Sets the value to a list of `size` elements. Returns a pointer to the start |
| // of the vector. |
| // |
| // Safety: Rust is required to convert this to a Slice<Value>(pointer, size) |
| Any* SetValueList(Value& self, const ParseNode* origin, size_t size); |
| void SetValueScope(Value& self, |
| const ParseNode* origin, |
| std::unique_ptr<Scope> scope); |
| // Returns a "std::vector<Value>". |
| // |
| // Safety: Rust is required to convert this to a Slice<Value>. |
| SliceAny GetValueList(const Value& self); |
| |
| // GN values are never created in starlark in production code. |
| // If a value may ever be returned, it will be passed as a mutable output |
| // parameter. |
| std::unique_ptr<Value> NewValueForTesting(); |
| |
| #endif // TOOLS_GN_FFI_VALUE_H_ |