| // 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 | |
| // We encode backwards, to avoid pre-computing lengths (one-pass encode). | |
| #include "upb/wire/encode.h" | |
| #include <stdbool.h> | |
| #include <stdint.h> | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include "upb/mem/arena.h" | |
| #include "upb/message/message.h" | |
| #include "upb/mini_table/message.h" | |
| #include "upb/wire/internal/encoder.h" | |
| // Must be last. | |
| #include "upb/port/def.inc" | |
| upb_EncodeStatus upb_Encode(const upb_Message* msg, const upb_MiniTable* l, | |
| int options, upb_Arena* arena, char** buf, | |
| size_t* size) { | |
| return _upb_Encode(msg, l, options, arena, buf, size, false); | |
| } | |
| upb_EncodeStatus upb_EncodeLengthPrefixed(const upb_Message* msg, | |
| const upb_MiniTable* l, int options, | |
| upb_Arena* arena, char** buf, | |
| size_t* size) { | |
| return _upb_Encode(msg, l, options, arena, buf, size, true); | |
| } | |
| const char* upb_EncodeStatus_String(upb_EncodeStatus status) { | |
| switch (status) { | |
| case kUpb_EncodeStatus_Ok: | |
| return "Ok"; | |
| case kUpb_EncodeStatus_MissingRequired: | |
| return "Missing required field"; | |
| case kUpb_EncodeStatus_MaxDepthExceeded: | |
| return "Max depth exceeded"; | |
| case kUpb_EncodeStatus_OutOfMemory: | |
| return "Arena alloc failed"; | |
| default: | |
| return "Unknown encode status"; | |
| } | |
| } |