// Protocol Buffers - Google's data interchange format // Copyright 2023 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_HPB_H__ #define GOOGLE_PROTOBUF_HPB_HPB_H__ #include #include "absl/base/attributes.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "hpb/arena.h" #include "hpb/extension.h" #include "hpb/internal/template_help.h" #include "hpb/multibackend.h" #include "hpb/options.h" #include "hpb/ptr.h" #include "hpb/status.h" #if HPB_INTERNAL_BACKEND == HPB_INTERNAL_BACKEND_UPB #include "hpb/backend/upb/upb.h" #elif HPB_INTERNAL_BACKEND == HPB_INTERNAL_BACKEND_CPP #include "hpb/backend/cpp/cpp.h" #else #error hpb backend unknown #endif namespace hpb { template typename T::Proxy CreateMessage(Arena& arena) { return backend::CreateMessage(arena); } template typename T::Proxy CloneMessage(Ptr message, Arena& arena) { return backend::CloneMessage(message, arena); } template void DeepCopy(Ptr source_message, Ptr target_message) { static_assert(!std::is_const_v); backend::DeepCopy(source_message, target_message); } template void DeepCopy(Ptr source_message, T* target_message) { static_assert(!std::is_const_v); DeepCopy(source_message, Ptr(target_message)); } template void DeepCopy(const T* source_message, T* target_message) { static_assert(!std::is_const_v); DeepCopy(Ptr(source_message), Ptr(target_message)); } template void ClearMessage(internal::PtrOrRawMutable message) { backend::ClearMessage(message); } // Note that the default extension registry is the the generated registry. template hpb::StatusOr Parse(absl::string_view bytes, ParseOptions options) { return backend::Parse(bytes, options); } template ABSL_MUST_USE_RESULT bool Parse(internal::PtrOrRaw message, absl::string_view bytes, const ExtensionRegistry& extension_registry = ExtensionRegistry::generated_registry()) { return backend::Parse(message, bytes, extension_registry); } // Deprecated. Use the overload that returns hpb::StatusOr instead. // Note that the default extension registry is the empty registry. template ABSL_DEPRECATED("Prefer the overload that returns hpb::StatusOr") absl::StatusOr Parse(absl::string_view bytes, const ExtensionRegistry& extension_registry = ExtensionRegistry::generated_registry()) { return backend::Parse(bytes, extension_registry); } template absl::StatusOr Serialize(internal::PtrOrRaw message, Arena& arena) { return backend::Serialize(message, arena); } } // namespace hpb #endif // GOOGLE_PROTOBUF_HPB_HPB_H__