// Adds handlers to a map-entry msgdef. static void add_handlers_for_mapentry(const upb_msgdef* msgdef, upb_handlers* h, Descriptor* desc) { const upb_fielddef* key_field = map_entry_key(msgdef); const upb_fielddef* value_field = map_entry_value(msgdef); map_handlerdata_t* hd = new_map_handlerdata(0, msgdef, desc); upb_handlers_addcleanup(h, hd, free); upb_handlerattr attr = UPB_HANDLERATTR_INITIALIZER; upb_handlerattr_sethandlerdata(&attr, hd); upb_handlers_setendmsg(h, endmap_handler, &attr); add_handlers_for_singular_field( h, key_field, offsetof(map_parse_frame_t, key_storage)); add_handlers_for_singular_field( h, value_field, offsetof(map_parse_frame_t, value_storage)); }
const upb_fielddef* map_field_value(const upb_fielddef* field) { const upb_msgdef* subdef = map_entry_msgdef(field); return map_entry_value(subdef); }
const upb_fielddef* map_field_value(const upb_fielddef* field) { assert(is_map_field(field)); const upb_msgdef* subdef = upb_fielddef_msgsubdef(field); return map_entry_value(subdef); }