Go to the documentation of this file.
44 #include "upb/port_def.inc"
91 size_t have = e->end - e->ptr;
100 e->overflow += (
len - have);
111 size_t have = e->end - e->ptr;
122 e->overflow += (
n - have);
129 if (nanos == 0)
return;
130 if (nanos < 0 || nanos >= 1000000000) {
131 jsonenc_err(e,
"error formatting timestamp as JSON: invalid nanos");
134 while (nanos % 1000 == 0) {
148 int L,
N,
I, J, K, hour,
min, sec;
152 "error formatting timestamp as JSON: minimum acceptable value "
153 "is 0001-01-01T00:00:00Z");
154 }
else if (
seconds > 253402300799) {
156 "error formatting timestamp as JSON: maximum acceptable value "
157 "is 9999-12-31T23:59:59Z");
165 L = (
int)(
seconds / 86400) - 719162 + 68569 + 2440588;
167 L =
L - (146097 *
N + 3) / 4;
168 I = 4000 * (
L + 1) / 1461001;
169 L =
L - 1461 *
I / 4 + 31;
171 K =
L - 2447 * J / 80;
174 I = 100 * (
N - 49) +
I +
L;
193 (
seconds < 0) != (nanos < 0)) {
224 static const char base64[] =
225 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
226 const unsigned char*
ptr = (
unsigned char*)
str.data;
233 buf[0] = base64[
ptr[0] >> 2];
234 buf[1] = base64[((
ptr[0] & 0x3) << 4) | (
ptr[1] >> 4)];
235 buf[2] = base64[((
ptr[1] & 0xf) << 2) | (
ptr[2] >> 6)];
236 buf[3] = base64[
ptr[2] & 0x3f];
243 buf[0] = base64[
ptr[0] >> 2];
244 buf[1] = base64[((
ptr[0] & 0x3) << 4) | (
ptr[1] >> 4)];
245 buf[2] = base64[(
ptr[1] & 0xf) << 2];
250 buf[0] = base64[
ptr[0] >> 2];
251 buf[1] = base64[((
ptr[0] & 0x3) << 4)];
262 const char*
ptr =
str.data;
309 if (val == INFINITY) {
311 }
else if (val == -INFINITY) {
313 }
else if (val != val) {
350 jsonenc_err(e,
"Tried to encode Any, but no symtab was provided");
353 if (
type_url.size == 0)
goto badurl;
425 if (
ch >=
'A' &&
ch <=
'Z') {
426 jsonenc_err(e,
"Field mask element may not have upper-case letter.");
427 }
else if (
ch ==
'_') {
428 if (
ptr ==
end - 1 || *(
ptr + 1) <
'a' || *(
ptr + 1) >
'z') {
429 jsonenc_err(e,
"Underscore must be followed by a lowercase letter.");
450 for (
i = 0;
i <
n;
i++) {
724 for (
i = 0;
i <
n;
i++) {
747 size_t ret = e->ptr - e->buf + e->overflow;
750 if (e->ptr == e->end) e->ptr--;
767 e.ext_pool = ext_pool;
771 if (setjmp(e.err))
return -1;
@ kUpb_WellKnown_StringValue
uint32_t upb_FieldDef_Number(const upb_FieldDef *f)
std::chrono::duration< std::int_fast64_t > seconds
static void jsonenc_fieldpath(jsonenc *e, upb_StringView path)
upb_MessageValue upb_MapIterator_Key(const upb_Map *map, size_t iter)
int __cdecl vsnprintf(char *buffer, size_t count, const char *format, va_list argptr)
static void jsonenc_msgfields(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m, bool first)
static void jsonenc_mapkey(jsonenc *e, upb_MessageValue val, const upb_FieldDef *f)
static void jsonenc_any(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
const upb_MiniTable * upb_MessageDef_MiniTable(const upb_MessageDef *m)
#define UPB_STRINGVIEW_ARGS(view)
upb_DecodeStatus upb_Decode(const char *buf, size_t size, void *msg, const upb_MiniTable *l, const upb_ExtensionRegistry *extreg, int options, upb_Arena *arena)
const char * upb_EnumValueDef_Name(const upb_EnumValueDef *ev)
static void jsonenc_printf(jsonenc *e, const char *fmt,...)
const upb_DefPool * ext_pool
#define UPB_UNREACHABLE()
static void jsonenc_fieldmask(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
static void jsonenc_value(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
size_t upb_JsonEncode(const upb_Message *msg, const upb_MessageDef *m, const upb_DefPool *ext_pool, int options, char *buf, size_t size, upb_Status *status)
static void jsonenc_nanos(jsonenc *e, int32_t nanos)
static upb_Arena * jsonenc_arena(jsonenc *e)
upb_MessageValue upb_Array_Get(const upb_Array *arr, size_t i)
#define UPB_PRINTF(str, first_vararg)
UPB_INLINE upb_Arena * upb_Arena_New(void)
grpc_core::ScopedArenaPtr arena
const upb_Array * array_val
static void upb_JsonEncode_Double(jsonenc *e, double val)
upb_Message * upb_Message_New(const upb_MessageDef *m, upb_Arena *a)
const upb_EnumValueDef * upb_EnumDef_FindValueByNumber(const upb_EnumDef *def, int32_t num)
static void jsonenc_struct(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
@ kUpb_WellKnown_FloatValue
static void jsonenc_timestamp(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
#define UPB_PTRADD(ptr, ofs)
void upb_Status_SetErrorMessage(upb_Status *status, const char *msg)
upb_WellKnown upb_MessageDef_WellKnownType(const upb_MessageDef *m)
void upb_Status_VSetErrorFormat(upb_Status *status, const char *fmt, va_list args)
static void jsonenc_duration(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
#define kUpb_Message_Begin
bool upb_FieldDef_IsMap(const upb_FieldDef *f)
bool upb_MapIterator_Next(const upb_Map *map, size_t *iter)
bool upb_FieldDef_HasPresence(const upb_FieldDef *f)
@ kUpb_WellKnown_BytesValue
@ kUpb_WellKnown_Unspecified
@ kUpb_WellKnown_Timestamp
static void jsonenc_fieldval(jsonenc *e, const upb_FieldDef *f, upb_MessageValue val, bool *first)
static void jsonenc_array(jsonenc *e, const upb_Array *arr, const upb_FieldDef *f)
static void jsonenc_map(jsonenc *e, const upb_Map *map, const upb_FieldDef *f)
static void jsonenc_wrapper(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
static void jsonenc_string(jsonenc *e, upb_StringView str)
const char * upb_EnumDef_FullName(const upb_EnumDef *e)
@ kUpb_WellKnown_UInt32Value
static const upb_MessageDef * jsonenc_getanymsg(jsonenc *e, upb_StringView type_url)
static void jsonenc_listvalue(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
bool upb_FieldDef_IsExtension(const upb_FieldDef *f)
@ kUpb_WellKnown_BoolValue
#define UPB_STRINGVIEW_FORMAT
bool upb_Message_Next(const upb_Message *msg, const upb_MessageDef *m, const upb_DefPool *ext_pool, const upb_FieldDef **out_f, upb_MessageValue *out_val, size_t *iter)
static void jsonenc_stringbody(jsonenc *e, upb_StringView str)
const upb_Message * msg_val
upb_CType upb_FieldDef_CType(const upb_FieldDef *f)
static void jsonenc_scalar(jsonenc *e, upb_MessageValue val, const upb_FieldDef *f)
const upb_MessageDef * upb_FieldDef_MessageSubDef(const upb_FieldDef *f)
@ upb_JsonEncode_UseProtoNames
const upb_EnumDef * upb_FieldDef_EnumSubDef(const upb_FieldDef *f)
size_t upb_Array_Size(const upb_Array *arr)
bool upb_Message_Has(const upb_Message *msg, const upb_FieldDef *f)
static void jsonenc_putbytes(jsonenc *e, const void *data, size_t len)
static void jsonenc_enum(int32_t val, const upb_FieldDef *f, jsonenc *e)
static UPB_NORETURN void jsonenc_errf(jsonenc *e, const char *fmt,...)
static size_t jsonenc_nullz(jsonenc *e, size_t size)
GTEST_API_ const char * fmt
static void jsonenc_msgfield(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
@ kUpb_WellKnown_UInt64Value
@ kUpb_WellKnown_Duration
const char * upb_FieldDef_JsonName(const upb_FieldDef *f)
upb_MessageValue upb_Message_Get(const upb_Message *msg, const upb_FieldDef *f)
bool upb_FieldDef_IsRepeated(const upb_FieldDef *f)
const upb_MessageDef * upb_DefPool_FindMessageByNameWithSize(const upb_DefPool *s, const char *sym, size_t len)
UniquePtr< SSL_SESSION > ret
@ upb_JsonEncode_EmitDefaults
std::array< int64_t, Size > values
@ kUpb_WellKnown_ListValue
@ kUpb_WellKnown_Int64Value
@ kUpb_WellKnown_DoubleValue
@ kUpb_WellKnown_Int32Value
void _upb_EncodeRoundTripFloat(float val, char *buf, size_t size)
static UPB_NORETURN void jsonenc_err(jsonenc *e, const char *msg)
const char * upb_FieldDef_Name(const upb_FieldDef *f)
static void upb_JsonEncode_Float(jsonenc *e, float val)
int upb_MessageDef_FieldCount(const upb_MessageDef *m)
static void jsonenc_putsep(jsonenc *e, const char *str, bool *first)
static bool upb_JsonEncode_HandleSpecialDoubles(jsonenc *e, double val)
const upb_FieldDef * upb_MessageDef_Field(const upb_MessageDef *m, int i)
upb_MessageValue upb_MapIterator_Value(const upb_Map *map, size_t iter)
static void jsonenc_msg(jsonenc *e, const upb_Message *msg, const upb_MessageDef *m)
@ kUpb_WellKnown_FieldMask
const upb_FieldDef * upb_MessageDef_FindFieldByNumber(const upb_MessageDef *m, uint32_t i)
static void jsonenc_bytes(jsonenc *e, upb_StringView str)
void _upb_EncodeRoundTripDouble(double val, char *buf, size_t size)
void upb_Arena_Free(upb_Arena *a)
const char * upb_FieldDef_FullName(const upb_FieldDef *f)
static void jsonenc_putstr(jsonenc *e, const char *str)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:25