1/* Test nanopb option parsing. 2 * options.expected lists the patterns that are searched for in the output. 3 */ 4 5syntax = "proto2"; 6 7import "nanopb.proto"; 8 9// File level options 10option (nanopb_fileopt).max_size = 20; 11 12message Message1 13{ 14 required string filesize = 1; 15} 16 17// Message level options 18message Message2 19{ 20 option (nanopb_msgopt).max_size = 30; 21 required string msgsize = 1; 22} 23 24// Field level options 25message Message3 26{ 27 option (nanopb_msgopt).msgid = 103; 28 required string fieldsize = 1 [(nanopb).max_size = 40]; 29 required string fieldlen = 2 [(nanopb).max_length = 40]; 30} 31 32// Forced callback field 33message Message4 34{ 35 option (nanopb_msgopt).msgid = 104; 36 required int32 int32_callback = 1 [(nanopb).type = FT_CALLBACK]; 37} 38 39// Short enum names 40enum Enum1 41{ 42 option (nanopb_enumopt).long_names = false; 43 EnumValue1 = 1; 44 EnumValue2 = 2; 45} 46 47message EnumTest 48{ 49 required Enum1 field = 1 [default = EnumValue2]; 50} 51 52// Short enum names inside message 53message Message5 54{ 55 option (nanopb_msgopt).msgid = 105; 56 enum Enum2 57 { 58 option (nanopb_enumopt).long_names = false; 59 EnumValue1 = 1; 60 } 61 required Enum2 field = 1 [default = EnumValue1]; 62} 63 64// Packed structure 65message my_packed_struct 66{ 67 option (nanopb_msgopt).packed_struct = true; 68 optional int32 myfield = 1; 69} 70 71// Message with ignored field 72message Message6 73{ 74 required int32 field1 = 1; 75 optional int32 skipped_field = 2 [(nanopb).type = FT_IGNORE]; 76} 77 78// Message that is skipped 79message SkippedMessage 80{ 81 option (nanopb_msgopt).skip_message = true; 82 required int32 foo = 1; 83} 84 85// Message with oneof field 86message OneofMessage 87{ 88 oneof foo { 89 int32 bar = 1; 90 } 91} 92 93// Proto3-style optional field in proto2 file 94message Proto3Field 95{ 96 optional int32 proto3field = 1 [(nanopb).proto3 = true]; 97} 98 99// Wide descriptors 100message WideMessage 101{ 102 option (nanopb_msgopt).descriptorsize = DS_4; 103 required int32 foo = 1; 104} 105 106// Wide descriptor option in a single field 107message WideMessage2 108{ 109 required int32 foo = 1 [(nanopb).descriptorsize = DS_8]; 110 required int32 foo2 = 2 [(nanopb).descriptorsize = DS_4]; 111 required int32 foo3 = 3; 112} 113 114// Default value for has_ field 115message HasFieldMessage 116{ 117 optional int32 present = 1 [(nanopb).default_has = true]; 118 optional int32 missing = 2 [(nanopb).default_has = false]; 119 optional int32 normal = 3; 120} 121 122// Overridden type in generated C code 123message TypeOverrideMessage 124{ 125 required Enum1 normal = 1; 126 required Enum1 overridden = 2 [(nanopb).type_override = TYPE_UINT32]; 127} 128