#include #include enum E { //# $\label{enum}$ NoValue = -1, ValueA, //# pretty=A $\label{pretty}$ ValueB, //# pretty=B }; struct X { //# decoder encoder $\label{decoder_encoder}$ int i; //#1 required $\label{required}$ enum E e; //#2 default=NoValue print=no $\label{default}$ $\label{print_no}$ uint8_t b[8]; //#3 $\label{fixed_size}$ uint8_t c[8]; //#4 num_at=num_c $\label{variable_size}$ char *s; //#5 truncate $\label{truncate}$ char *t; uint64_t u; int x; //# $\label{only_pretty}$ int num_c; uint8_t buf[32]; //# buffer=here $\label{buffer}$ uint8_t rest[32]; //# rest=here $\label{rest}$ }; struct Y { //# decoder encoder int num_x; struct X x[4]; //#1 num_at=^ callback=each_x $\label{num_at_above}$ $\label{callback}$ int all_i; }; static int each_x(struct Y *y, struct X *x) { // $\label{cb}$ if(y->num_x == 0) y->sum_i = 0; y->sum_i += x->i; return PB_CALLBACK_OK; } #include "def0.pb.h"