c-protobuf/test/Test1_protobuf.c

50 lines
1.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "protobuf.h"
#include "varint.h"
#include "Test1_protobuf.h"
enum WireType Test1_message_fields[] = { WIRETYPE_VARINT };
int Test1_new(struct Test1** test1) {
*test1 = (struct Test1*)malloc(sizeof(struct Test1));
if (*test1 == NULL)
return 0;
(*test1)->a = 0;
return 1;
}
int Test1_free(struct Test1* test1) {
free(test1);
return 1;
}
int Test1_protobuf_encode(struct Test1* incoming, unsigned char* buffer, size_t max_buffer_length, size_t* bytes_written) {
protobuf_encode_varint(1, Test1_message_fields[0], incoming->a, buffer, max_buffer_length, bytes_written);
return 1;
}
int Test1_protobuf_decode(unsigned char* buffer, size_t buffer_length, struct Test1** output) {
int pos = 0;
if (Test1_new(output) == 0)
return 0;
while (pos < buffer_length) { // loop through buffer
size_t bytes_read = 0;
int field_no;
enum WireType field_type;
if (protobuf_decode_field_and_type(buffer, buffer_length, &field_no, &field_type, &bytes_read) == 0) {
Test1_free(*output);
return 0;
}
pos += bytes_read;
switch (field_no) {
case (1):
(*output)->a = varint_decode(&buffer[pos], buffer_length - pos, &bytes_read);
pos += (unsigned int)bytes_read;
break;
}
}
return 1;
}