// 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_BACKEND_UPB_ERROR_H__ #define GOOGLE_PROTOBUF_HPB_BACKEND_UPB_ERROR_H__ #include #include #include "absl/log/absl_log.h" #include "upb/wire/decode.h" #include "upb/wire/encode.h" namespace hpb { namespace internal { namespace backend { namespace upb { class Error { public: explicit Error(upb_DecodeStatus error) : enum_kind_(kDecodeStatus), error_code_(error) {} explicit Error(upb_EncodeStatus error) : enum_kind_(kEncodeStatus), error_code_(error) {} std::string ToString() const { switch (enum_kind_) { case kDecodeStatus: { upb_DecodeStatus decode_status = static_cast(error_code_); return std::string(upb_DecodeStatus_String(decode_status)); } case kEncodeStatus: { upb_EncodeStatus encode_status = static_cast(error_code_); return std::string(upb_EncodeStatus_String(encode_status)); } default: { ABSL_LOG(FATAL) << "hpb::Error unknown enum kind: " << enum_kind_; } } } private: enum EnumCode { kDecodeStatus, kEncodeStatus }; uint16_t enum_kind_ = 0; uint16_t error_code_ = 0; }; } // namespace upb } // namespace backend } // namespace internal } // namespace hpb #endif // GOOGLE_PROTOBUF_HPB_BACKEND_UPB_ERROR_H__