// Protocol Buffers - Google's data interchange format // Copyright 2025 Google LLC. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd #ifndef GOOGLE_PROTOBUF_HPB_OPTIONS_H__ #define GOOGLE_PROTOBUF_HPB_OPTIONS_H__ #include "hpb/extension.h" #include "hpb/multibackend.h" namespace hpb { struct ParseOptions { // If true, the parsed proto may alias the input string instead of copying. // Aliased data could include string fields, unknown fields, and possibly // other data. // // REQUIRES: the input string outlives the resulting proto. bool alias_string = false; #if HPB_INTERNAL_BACKEND == HPB_INTERNAL_BACKEND_UPB // For the upb backend, the user can determine which extension registry // they wish to use. Unless there are compelling reasons to do otherwise, // we recommend using the generated registry, which uses linker arrays // and intelligently performs tree shaking when possible. const ExtensionRegistry& extension_registry = ExtensionRegistry::generated_registry(); #endif }; inline ParseOptions DefaultParseOptions() { return ParseOptions(); } #if HPB_INTERNAL_BACKEND == HPB_INTERNAL_BACKEND_UPB // The empty registry is provided here as a convenience for extant users. // Prefer the generated registry. inline ParseOptions ParseOptionsWithEmptyRegistry() { ParseOptions options{ .alias_string = false, .extension_registry = ExtensionRegistry::empty_registry(), }; return options; } #endif } // namespace hpb #endif // GOOGLE_PROTOBUF_HPB_OPTIONS_H__