mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
51 lines
1.6 KiB
C
51 lines
1.6 KiB
C
// 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";
|
|
}
|
|
}
|