Skip to content

Commit

Permalink
Testing of adding and removing fields from one version of a message t…
Browse files Browse the repository at this point in the history
…o another.
  • Loading branch information
eerimoq committed Jan 13, 2020
1 parent 618e668 commit cd9780f
Show file tree
Hide file tree
Showing 6 changed files with 698 additions and 1 deletion.
1 change: 1 addition & 0 deletions tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ all:
files/c_source/enum_provider.c \
files/c_source/field_names.c \
files/c_source/map.c \
files/c_source/add_and_remove_fields.c \
main.o
./a.out

Expand Down
21 changes: 21 additions & 0 deletions tests/files/add_and_remove_fields.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
syntax = "proto3";

package add_and_remove_fields;

// First version.
message Version1 {
int32 v1 = 1;
}

// v2 and v3 added.
message Version2 {
int32 v1 = 1;
int32 v2 = 2;
int32 v3 = 3;
}

// v1 and v2 removed, v4 added.
message Version3 {
int32 v3 = 3;
int32 v4 = 4;
}
348 changes: 348 additions & 0 deletions tests/files/c_source/add_and_remove_fields.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,348 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2019 Erik Moqvist
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

/**
* This file was generated by pbtools.
*/

#include <limits.h>
#include "add_and_remove_fields.h"

#if CHAR_BIT != 8
# error "Number of bits in a char must be 8."
#endif

void add_and_remove_fields_version1_init(
struct add_and_remove_fields_version1_t *self_p,
struct pbtools_heap_t *heap_p)
{
self_p->base.heap_p = heap_p;
self_p->v1 = 0;
}

void add_and_remove_fields_version1_encode_inner(
struct pbtools_encoder_t *encoder_p,
struct add_and_remove_fields_version1_t *self_p)
{
pbtools_encoder_write_int32(encoder_p, 1, self_p->v1);
}

void add_and_remove_fields_version1_decode_inner(
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version1_t *self_p)
{
int wire_type;

while (pbtools_decoder_available(decoder_p)) {
switch (pbtools_decoder_read_tag(decoder_p, &wire_type)) {

case 1:
self_p->v1 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

default:
pbtools_decoder_skip_field(decoder_p, wire_type);
break;
}
}
}

void add_and_remove_fields_version1_encode_repeated_inner(
struct pbtools_encoder_t *encoder_p,
int field_number,
struct add_and_remove_fields_version1_repeated_t *repeated_p)
{
pbtools_encode_repeated_inner(
encoder_p,
field_number,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version1_t),
(pbtools_message_encode_inner_t)add_and_remove_fields_version1_encode_inner);
}

void add_and_remove_fields_version1_decode_repeated_inner(
struct pbtools_repeated_info_t *repeated_info_p,
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version1_repeated_t *repeated_p)
{
pbtools_decode_repeated_inner(
repeated_info_p,
decoder_p,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version1_t),
(pbtools_message_init_t)add_and_remove_fields_version1_init,
(pbtools_message_decode_inner_t)add_and_remove_fields_version1_decode_inner);
}

struct add_and_remove_fields_version1_t *
add_and_remove_fields_version1_new(
void *workspace_p,
size_t size)
{
return (pbtools_message_new(
workspace_p,
size,
sizeof(struct add_and_remove_fields_version1_t),
(pbtools_message_init_t)add_and_remove_fields_version1_init));
}

int add_and_remove_fields_version1_encode(
struct add_and_remove_fields_version1_t *self_p,
uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_encode(
&self_p->base,
encoded_p,
size,
(pbtools_message_encode_inner_t)add_and_remove_fields_version1_encode_inner));
}

int add_and_remove_fields_version1_decode(
struct add_and_remove_fields_version1_t *self_p,
const uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_decode(
&self_p->base,
encoded_p,
size,
(pbtools_message_decode_inner_t)add_and_remove_fields_version1_decode_inner));
}

void add_and_remove_fields_version2_init(
struct add_and_remove_fields_version2_t *self_p,
struct pbtools_heap_t *heap_p)
{
self_p->base.heap_p = heap_p;
self_p->v1 = 0;
self_p->v2 = 0;
self_p->v3 = 0;
}

void add_and_remove_fields_version2_encode_inner(
struct pbtools_encoder_t *encoder_p,
struct add_and_remove_fields_version2_t *self_p)
{
pbtools_encoder_write_int32(encoder_p, 3, self_p->v3);
pbtools_encoder_write_int32(encoder_p, 2, self_p->v2);
pbtools_encoder_write_int32(encoder_p, 1, self_p->v1);
}

void add_and_remove_fields_version2_decode_inner(
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version2_t *self_p)
{
int wire_type;

while (pbtools_decoder_available(decoder_p)) {
switch (pbtools_decoder_read_tag(decoder_p, &wire_type)) {

case 1:
self_p->v1 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

case 2:
self_p->v2 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

case 3:
self_p->v3 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

default:
pbtools_decoder_skip_field(decoder_p, wire_type);
break;
}
}
}

void add_and_remove_fields_version2_encode_repeated_inner(
struct pbtools_encoder_t *encoder_p,
int field_number,
struct add_and_remove_fields_version2_repeated_t *repeated_p)
{
pbtools_encode_repeated_inner(
encoder_p,
field_number,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version2_t),
(pbtools_message_encode_inner_t)add_and_remove_fields_version2_encode_inner);
}

void add_and_remove_fields_version2_decode_repeated_inner(
struct pbtools_repeated_info_t *repeated_info_p,
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version2_repeated_t *repeated_p)
{
pbtools_decode_repeated_inner(
repeated_info_p,
decoder_p,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version2_t),
(pbtools_message_init_t)add_and_remove_fields_version2_init,
(pbtools_message_decode_inner_t)add_and_remove_fields_version2_decode_inner);
}

struct add_and_remove_fields_version2_t *
add_and_remove_fields_version2_new(
void *workspace_p,
size_t size)
{
return (pbtools_message_new(
workspace_p,
size,
sizeof(struct add_and_remove_fields_version2_t),
(pbtools_message_init_t)add_and_remove_fields_version2_init));
}

int add_and_remove_fields_version2_encode(
struct add_and_remove_fields_version2_t *self_p,
uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_encode(
&self_p->base,
encoded_p,
size,
(pbtools_message_encode_inner_t)add_and_remove_fields_version2_encode_inner));
}

int add_and_remove_fields_version2_decode(
struct add_and_remove_fields_version2_t *self_p,
const uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_decode(
&self_p->base,
encoded_p,
size,
(pbtools_message_decode_inner_t)add_and_remove_fields_version2_decode_inner));
}

void add_and_remove_fields_version3_init(
struct add_and_remove_fields_version3_t *self_p,
struct pbtools_heap_t *heap_p)
{
self_p->base.heap_p = heap_p;
self_p->v3 = 0;
self_p->v4 = 0;
}

void add_and_remove_fields_version3_encode_inner(
struct pbtools_encoder_t *encoder_p,
struct add_and_remove_fields_version3_t *self_p)
{
pbtools_encoder_write_int32(encoder_p, 4, self_p->v4);
pbtools_encoder_write_int32(encoder_p, 3, self_p->v3);
}

void add_and_remove_fields_version3_decode_inner(
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version3_t *self_p)
{
int wire_type;

while (pbtools_decoder_available(decoder_p)) {
switch (pbtools_decoder_read_tag(decoder_p, &wire_type)) {

case 3:
self_p->v3 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

case 4:
self_p->v4 = pbtools_decoder_read_int32(decoder_p, wire_type);
break;

default:
pbtools_decoder_skip_field(decoder_p, wire_type);
break;
}
}
}

void add_and_remove_fields_version3_encode_repeated_inner(
struct pbtools_encoder_t *encoder_p,
int field_number,
struct add_and_remove_fields_version3_repeated_t *repeated_p)
{
pbtools_encode_repeated_inner(
encoder_p,
field_number,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version3_t),
(pbtools_message_encode_inner_t)add_and_remove_fields_version3_encode_inner);
}

void add_and_remove_fields_version3_decode_repeated_inner(
struct pbtools_repeated_info_t *repeated_info_p,
struct pbtools_decoder_t *decoder_p,
struct add_and_remove_fields_version3_repeated_t *repeated_p)
{
pbtools_decode_repeated_inner(
repeated_info_p,
decoder_p,
(struct pbtools_repeated_message_t *)repeated_p,
sizeof(struct add_and_remove_fields_version3_t),
(pbtools_message_init_t)add_and_remove_fields_version3_init,
(pbtools_message_decode_inner_t)add_and_remove_fields_version3_decode_inner);
}

struct add_and_remove_fields_version3_t *
add_and_remove_fields_version3_new(
void *workspace_p,
size_t size)
{
return (pbtools_message_new(
workspace_p,
size,
sizeof(struct add_and_remove_fields_version3_t),
(pbtools_message_init_t)add_and_remove_fields_version3_init));
}

int add_and_remove_fields_version3_encode(
struct add_and_remove_fields_version3_t *self_p,
uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_encode(
&self_p->base,
encoded_p,
size,
(pbtools_message_encode_inner_t)add_and_remove_fields_version3_encode_inner));
}

int add_and_remove_fields_version3_decode(
struct add_and_remove_fields_version3_t *self_p,
const uint8_t *encoded_p,
size_t size)
{
return (pbtools_message_decode(
&self_p->base,
encoded_p,
size,
(pbtools_message_decode_inner_t)add_and_remove_fields_version3_decode_inner));
}

0 comments on commit cd9780f

Please sign in to comment.