-/* Field encoders */
-
-/* Copy srcsize bytes from src so that values are casted properly.
- * On little endian machine, copy to start of dest
- * On big endian machine, copy to end of dest
- * destsize must always be larger than srcsize
- *
- * Note: This is the reverse of the endian_copy in pb_decode.c.
- */
-static void endian_copy(void *dest, const void *src, size_t destsize, size_t srcsize)
-{
-#ifdef __BIG_ENDIAN__
- memcpy((char*)dest + (destsize - srcsize), src, srcsize);
-#else
- memcpy(dest, src, srcsize);
-#endif
-}
-
-bool pb_enc_varint(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
- uint64_t value = 0;
- endian_copy(&value, src, sizeof(value), field->data_size);
- return pb_encode_varint(stream, value);
-}
-
-bool pb_enc_svarint(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
- uint64_t value = 0;
- uint64_t zigzagged;
- uint64_t signbitmask, xormask;
- endian_copy(&value, src, sizeof(value), field->data_size);
-
- signbitmask = (uint64_t)0x80 << (field->data_size * 8 - 8);
- xormask = ((uint64_t)-1) >> (64 - field->data_size * 8);
- if (value & signbitmask)
- zigzagged = ((value ^ xormask) << 1) | 1;
- else
- zigzagged = value << 1;
-
- return pb_encode_varint(stream, zigzagged);
-}
-
-bool pb_enc_fixed(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
- #ifdef __BIG_ENDIAN__
- uint8_t bytes[8] = {0};
- endian_copy(bytes, src, sizeof(bytes), field->data_size);
- uint8_t lebytes[8] = {bytes[7], bytes[6], bytes[5], bytes[4],
- bytes[3], bytes[2], bytes[1], bytes[0]};
- return pb_write(stream, lebytes, field->data_size);
- #else
- return pb_write(stream, (uint8_t*)src, field->data_size);
- #endif
-}
-
-bool pb_enc_bytes(pb_ostream_t *stream, const pb_field_t *field, const void *src)
-{
- pb_bytes_array_t *bytes = (pb_bytes_array_t*)src;
- return pb_encode_string(stream, bytes->bytes, bytes->size);
-}
-
-bool pb_enc_string(pb_ostream_t *stream, const pb_field_t *field, const void *src)