blob: bfb6dde6f11cdd21e467d6ee702588a6e5713c2c [file] [log] [blame]
// 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__