1/* Test handling of enums with different value ranges.
2 * Depending on compiler and the packed_enum setting, the datatypes
3 * for enums can be either signed or unsigned. In past this has caused
4 * a bit of a problem for the encoder/decoder (issue #164).
5 */
6
7syntax = "proto2";
8
9import 'nanopb.proto';
10
11option (nanopb_fileopt).long_names = false;
12
13enum UnpackedUint8 {
14    option (nanopb_enumopt).packed_enum = false;
15    UU8_MIN = 0;
16    UU8_MAX = 255;
17}
18
19enum PackedUint8 {
20    option (nanopb_enumopt).packed_enum = true;
21    PU8_MIN = 0;
22    PU8_MAX = 255;
23}
24
25enum UnpackedInt8 {
26    option (nanopb_enumopt).packed_enum = false;
27    UI8_MIN = -128;
28    UI8_MAX = 127;
29}
30
31enum PackedInt8 {
32    option (nanopb_enumopt).packed_enum = true;
33    PI8_MIN = -128;
34    PI8_MAX = 127;
35}
36
37enum UnpackedUint16 {
38    option (nanopb_enumopt).packed_enum = false;
39    UU16_MIN = 0;
40    UU16_MAX = 65535;
41}
42
43enum PackedUint16 {
44    option (nanopb_enumopt).packed_enum = true;
45    PU16_MIN = 0;
46    PU16_MAX = 65535;
47}
48
49enum UnpackedInt16 {
50    option (nanopb_enumopt).packed_enum = false;
51    UI16_MIN = -32768;
52    UI16_MAX = 32767;
53}
54
55enum PackedInt16 {
56    option (nanopb_enumopt).packed_enum = true;
57    PI16_MIN = -32768;
58    PI16_MAX = 32767;
59}
60
61/* Protobuf supports enums up to 32 bits.
62 * The 32 bit case is covered by HugeEnum in the alltypes test.
63 */
64
65message PackedEnums {
66    required PackedUint8  u8_min  = 1;
67    required PackedUint8  u8_max  = 2;
68    required PackedInt8   i8_min  = 3;
69    required PackedInt8   i8_max  = 4;
70    required PackedUint16 u16_min = 5;
71    required PackedUint16 u16_max = 6;
72    required PackedInt16  i16_min = 7;
73    required PackedInt16  i16_max = 8;
74}
75
76message UnpackedEnums {
77    required UnpackedUint8  u8_min  = 1;
78    required UnpackedUint8  u8_max  = 2;
79    required UnpackedInt8   i8_min  = 3;
80    required UnpackedInt8   i8_max  = 4;
81    required UnpackedUint16 u16_min = 5;
82    required UnpackedUint16 u16_max = 6;
83    required UnpackedInt16  i16_min = 7;
84    required UnpackedInt16  i16_max = 8;
85}
86
87