| // 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 ParseOptionsDefault() { 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__ |