From 62dbeee8f69902b87ef11d13cef54ae261d74e6f Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sat, 1 Aug 2009 23:13:20 -0700 Subject: Add upb_serialize.c. --- src/upb_serialize.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/upb_serialize.c (limited to 'src/upb_serialize.c') diff --git a/src/upb_serialize.c b/src/upb_serialize.c new file mode 100644 index 0000000..a1d4718 --- /dev/null +++ b/src/upb_serialize.c @@ -0,0 +1,34 @@ +/* + * upb - a minimalist implementation of protocol buffers. + * + * Copyright (c) 2009 Joshua Haberman. See LICENSE for details. + */ + +#include "upb_serialize.h" +#include "descriptor.h" + +upb_status_t upb_serialize_value(uint8_t *buf, uint8_t *end, upb_field_type_t ft, + union upb_value_ptr v, uint8_t **outbuf) +{ +#define CASE(t, member_name) \ + case GOOGLE_PROTOBUF_FIELDDESCRIPTORPROTO_TYPE_ ## t: \ + return upb_put_ ## t(buf, end, *v.member_name, outbuf); + switch(ft) { + CASE(DOUBLE, _double) + CASE(FLOAT, _float) + CASE(INT32, int32) + CASE(INT64, int64) + CASE(UINT32, uint32) + CASE(UINT64, uint64) + CASE(SINT32, int32) + CASE(SINT64, int64) + CASE(FIXED32, uint32) + CASE(FIXED64, uint64) + CASE(SFIXED32, int32) + CASE(SFIXED64, int64) + CASE(BOOL, _bool) + CASE(ENUM, int32) + default: return UPB_ERROR_ILLEGAL; + } +#undef CASE +} -- cgit v1.2.3