blob: 6b4d6c19186670092c8ac8fdaa9cc4a3533fd3a6 [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_BACKEND_UPB_ERROR_H__
#define GOOGLE_PROTOBUF_HPB_BACKEND_UPB_ERROR_H__
#include <cstdint>
#include <string>
#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<upb_DecodeStatus>(error_code_);
return std::string(upb_DecodeStatus_String(decode_status));
}
case kEncodeStatus: {
upb_EncodeStatus encode_status =
static_cast<upb_EncodeStatus>(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__