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 7 syntax = "proto2"; 8 9 import 'nanopb.proto'; 10 11 option (nanopb_fileopt).long_names = false; 12 13 enum UnpackedUint8 { 14 option (nanopb_enumopt).packed_enum = false; 15 UU8_MIN = 0; 16 UU8_MAX = 255; 17 } 18 19 enum PackedUint8 { 20 option (nanopb_enumopt).packed_enum = true; 21 PU8_MIN = 0; 22 PU8_MAX = 255; 23 } 24 25 enum UnpackedInt8 { 26 option (nanopb_enumopt).packed_enum = false; 27 UI8_MIN = -128; 28 UI8_MAX = 127; 29 } 30 31 enum PackedInt8 { 32 option (nanopb_enumopt).packed_enum = true; 33 PI8_MIN = -128; 34 PI8_MAX = 127; 35 } 36 37 enum UnpackedUint16 { 38 option (nanopb_enumopt).packed_enum = false; 39 UU16_MIN = 0; 40 UU16_MAX = 65535; 41 } 42 43 enum PackedUint16 { 44 option (nanopb_enumopt).packed_enum = true; 45 PU16_MIN = 0; 46 PU16_MAX = 65535; 47 } 48 49 enum UnpackedInt16 { 50 option (nanopb_enumopt).packed_enum = false; 51 UI16_MIN = -32768; 52 UI16_MAX = 32767; 53 } 54 55 enum 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 65 message 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 76 message 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