diff --git a/hpb/BUILD b/hpb/BUILD index 1f007ed4fe..67b10e1285 100644 --- a/hpb/BUILD +++ b/hpb/BUILD @@ -55,6 +55,7 @@ cc_library( deps = [ ":extension_lock", "//hpb:ptr", + "//hpb/internal", "//hpb/internal:template_help", "//upb:base", "//upb:mem", diff --git a/hpb/hpb.h b/hpb/hpb.h index 097fdc81e2..dcb27da1e9 100644 --- a/hpb/hpb.h +++ b/hpb/hpb.h @@ -15,6 +15,7 @@ #include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" +#include "google/protobuf/hpb/internal/internal.h" #include "google/protobuf/hpb/internal/template_help.h" #include "google/protobuf/hpb/ptr.h" #include "upb/base/status.hpp" @@ -69,45 +70,6 @@ absl::Status MessageEncodeError(upb_EncodeStatus status, SourceLocation loc = SourceLocation::current()); namespace internal { -struct PrivateAccess { - template - static auto* GetInternalMsg(T&& message) { - return message->msg(); - } - template - static auto Proxy(upb_Message* p, upb_Arena* arena) { - return typename T::Proxy(p, arena); - } - template - static auto CProxy(const upb_Message* p, upb_Arena* arena) { - return typename T::CProxy(p, arena); - } - template - static auto CreateMessage(upb_Arena* arena) { - return typename T::Proxy(upb_Message_New(T::minitable(), arena), arena); - } - - template - static constexpr uint32_t GetExtensionNumber(const ExtensionId& id) { - return id.number(); - } -}; - -template -auto* GetInternalMsg(T&& message) { - return PrivateAccess::GetInternalMsg(std::forward(message)); -} - -template -typename T::Proxy CreateMessageProxy(upb_Message* msg, upb_Arena* arena) { - return typename T::Proxy(msg, arena); -} - -template -typename T::CProxy CreateMessage(const upb_Message* msg, upb_Arena* arena) { - return PrivateAccess::CProxy(msg, arena); -} - class ExtensionMiniTableProvider { public: constexpr explicit ExtensionMiniTableProvider( diff --git a/hpb/internal/BUILD b/hpb/internal/BUILD index 35268e3000..5fd24ba64a 100644 --- a/hpb/internal/BUILD +++ b/hpb/internal/BUILD @@ -18,3 +18,14 @@ cc_library( "//hpb:ptr", ], ) + +cc_library( + name = "internal", + hdrs = ["internal.h"], + compatible_with = ["//buildenv/target:non_prod"], + visibility = ["//hpb:__subpackages__"], + deps = [ + "//upb:mem", + "//upb:message", + ], +) diff --git a/hpb/internal/internal.h b/hpb/internal/internal.h new file mode 100644 index 0000000000..bc00cafbdd --- /dev/null +++ b/hpb/internal/internal.h @@ -0,0 +1,53 @@ +#ifndef GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ +#define GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ + +#include +#include + +#include "upb/mem/arena.h" +#include "upb/message/message.h" + +namespace hpb::internal { + +struct PrivateAccess { + template + static auto* GetInternalMsg(T&& message) { + return message->msg(); + } + template + static auto Proxy(upb_Message* p, upb_Arena* arena) { + return typename T::Proxy(p, arena); + } + template + static auto CProxy(const upb_Message* p, upb_Arena* arena) { + return typename T::CProxy(p, arena); + } + template + static auto CreateMessage(upb_Arena* arena) { + return typename T::Proxy(upb_Message_New(T::minitable(), arena), arena); + } + + template + static constexpr uint32_t GetExtensionNumber(const ExtensionId& id) { + return id.number(); + } +}; + +template +auto* GetInternalMsg(T&& message) { + return PrivateAccess::GetInternalMsg(std::forward(message)); +} + +template +typename T::Proxy CreateMessageProxy(upb_Message* msg, upb_Arena* arena) { + return typename T::Proxy(msg, arena); +} + +template +typename T::CProxy CreateMessage(const upb_Message* msg, upb_Arena* arena) { + return PrivateAccess::CProxy(msg, arena); +} + +} // namespace hpb::internal + +#endif // GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__