Add an encoder optimized for in-memory buffers.
git-svn-id: https://svn.kapsi.fi/jpa/nanopb-dev@1088 e3a754e5-d11d-0410-8d38-ebb782a927b9
This commit is contained in:
committed by
Petteri Aimonen
parent
3979f9137f
commit
accd93be8d
43
pb_encode_buffer.h
Normal file
43
pb_encode_buffer.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#ifndef _PB_ENCODE_BUFFER_H_
|
||||
#define _PB_ENCODE_BUFFER_H_
|
||||
|
||||
/* pb_encode_buffer.h: Functions to encode protocol buffers to an
|
||||
* in-memory array of bytes. Depends on pb_encode_buffer.c. The main
|
||||
* function is pb_encode_buffer. You also need an output buffer,
|
||||
* structures and their field descriptions (just like with pb_decode
|
||||
* or pb_encode).
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "pb.h"
|
||||
|
||||
/* Output stream for an in-memory buffer.
|
||||
*/
|
||||
struct _pb_strstream_t
|
||||
{
|
||||
uint8_t *buffer;
|
||||
uint8_t *last;
|
||||
};
|
||||
|
||||
pb_strstream_t pb_strstream_from_buffer(uint8_t *buf, size_t bufsize);
|
||||
bool pb_buf_write(pb_strstream_t *stream, const uint8_t *buf, size_t count);
|
||||
|
||||
/* --- Helper functions ---
|
||||
* You may want to use these from your caller or callbacks.
|
||||
*/
|
||||
|
||||
bool pb_encbuf_varint(pb_strstream_t *stream, uint64_t value);
|
||||
bool pb_encbuf_tag(pb_strstream_t *stream, pb_wire_type_t wiretype, int field_number);
|
||||
/* Encode tag based on LTYPE and field number defined in the field structure. */
|
||||
bool pb_encbuf_tag_for_field(pb_strstream_t *stream, const pb_field_t *field);
|
||||
/* Write length as varint and then the contents of buffer. */
|
||||
bool pb_encbuf_string(pb_strstream_t *stream, const uint8_t *buffer, size_t size);
|
||||
|
||||
/* Encode struct to given output stream.
|
||||
* Returns true on success, false on any failure.
|
||||
* The actual struct pointed to by src_struct must match the description in msg.
|
||||
* All required fields in the struct are assumed to have been filled in.
|
||||
*/
|
||||
bool pb_encode_buffer(pb_strstream_t *stream, const pb_message_t *msg, const void *src_struct);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user