summaryrefslogtreecommitdiff
path: root/src/app/prototest/nanopb.proto
blob: c8067e3a5f10a03a8e50af417756917efdd0757a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Custom options for defining:
// - Maximum size of string/bytes
// - Maximum number of elements in array
//
// These are used by nanopb to generate statically allocable structures
// for memory-limited environments.

syntax = "proto2";
import "google/protobuf/descriptor.proto";

option java_package = "fi.kapsi.koti.jpa.nanopb";

enum FieldType {
    FT_DEFAULT = 0; // Automatically decide field type, generate static field if possible.
    FT_CALLBACK = 1; // Always generate a callback field.
    FT_POINTER = 4; // Always generate a dynamically allocated field.
    FT_STATIC = 2; // Generate a static field or raise an exception if not possible.
    FT_IGNORE = 3; // Ignore the field completely.
    FT_INLINE = 5; // Legacy option, use the separate 'fixed_length' option instead
}

enum IntSize {
    IS_DEFAULT = 0; // Default, 32/64bit based on type in .proto
    IS_8 = 8;
    IS_16 = 16;
    IS_32 = 32;
    IS_64 = 64;
}

enum TypenameMangling {
    M_NONE = 0; // Default, no typename mangling
    M_STRIP_PACKAGE = 1; // Strip current package name
    M_FLATTEN = 2; // Only use last path component
    M_PACKAGE_INITIALS = 3; // Replace the package name by the initials
}

enum DescriptorSize {
    DS_AUTO = 0; // Select minimal size based on field type
    DS_1 = 1;    // 1 word; up to 15 byte fields, no arrays
    DS_2 = 2;    // 2 words; up to 4095 byte fields, 4095 entry arrays
    DS_4 = 4;    // 4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays
    DS_8 = 8;    // 8 words; up to 2^32-1 entry arrays
}

// This is the inner options message, which basically defines options for
// a field. When it is used in message or file scope, it applies to all
// fields.
message NanoPBOptions {
  // Allocated size for 'bytes' and 'string' fields.
  // For string fields, this should include the space for null terminator.
  optional int32 max_size = 1;
  
  // Maximum length for 'string' fields. Setting this is equivalent
  // to setting max_size to a value of length+1.
  optional int32 max_length = 14;
  
  // Allocated number of entries in arrays ('repeated' fields)
  optional int32 max_count = 2;
  
  // Size of integer fields. Can save some memory if you don't need
  // full 32 bits for the value.
  optional IntSize int_size = 7 [default = IS_DEFAULT];

  // Force type of field (callback or static allocation)
  optional FieldType type = 3 [default = FT_DEFAULT];
  
  // Use long names for enums, i.e. EnumName_EnumValue.
  optional bool long_names = 4 [default = true];
  
  // Add 'packed' attribute to generated structs.
  // Note: this cannot be used on CPUs that break on unaligned
  // accesses to variables.
  optional bool packed_struct = 5 [default = false];
  
  // Add 'packed' attribute to generated enums.
  optional bool packed_enum = 10 [default = false];
  
  // Skip this message
  optional bool skip_message = 6 [default = false];

  // Generate oneof fields as normal optional fields instead of union.
  optional bool no_unions = 8 [default = false];

  // integer type tag for a message
  optional uint32 msgid = 9;

  // decode oneof as anonymous union
  optional bool anonymous_oneof = 11 [default = false];

  // Proto3 singular field does not generate a "has_" flag
  optional bool proto3 = 12 [default = false];
  
  // Force proto3 messages to have no "has_" flag.
  // This was default behavior until nanopb-0.4.0.
  optional bool proto3_singular_msgs = 21 [default = false];

  // Generate an enum->string mapping function (can take up lots of space).
  optional bool enum_to_string = 13 [default = false];

  // Generate bytes arrays with fixed length
  optional bool fixed_length = 15 [default = false];

  // Generate repeated field with fixed count
  optional bool fixed_count = 16 [default = false];

  // Generate message-level callback that is called before decoding submessages.
  // This can be used to set callback fields for submsgs inside oneofs.
  optional bool submsg_callback = 22 [default = false];

  // Shorten or remove package names from type names.
  // This option applies only on the file level.
  optional TypenameMangling mangle_names = 17 [default = M_NONE];

  // Data type for storage associated with callback fields.
  optional string callback_datatype = 18 [default = "pb_callback_t"];

  // Callback function used for encoding and decoding.
  // Prior to nanopb-0.4.0, the callback was specified in per-field pb_callback_t
  // structure. This is still supported, but does not work inside e.g. oneof or pointer
  // fields. Instead, a new method allows specifying a per-message callback that
  // will be called for all callback fields in a message type.
  optional string callback_function = 19 [default = "pb_default_field_callback"];

  // Select the size of field descriptors. This option has to be defined
  // for the whole message, not per-field. Usually automatic selection is
  // ok, but if it results in compilation errors you can increase the field
  // size here.
  optional DescriptorSize descriptorsize = 20 [default = DS_AUTO];

  // Set default value for has_ fields.
  optional bool default_has = 23 [default = false];

  // Extra files to include in generated `.pb.h`
  repeated string include = 24;

  // Automatic includes to exlude from generated `.pb.h`
  // Same as nanopb_generator.py command line flag -x.
  repeated string exclude = 26;

  // Package name that applies only for nanopb.
  optional string package = 25;
  
  // Override type of the field in generated C code. Only to be used with related field types
  optional google.protobuf.FieldDescriptorProto.Type type_override = 27;

  // Due to historical reasons, nanopb orders fields in structs by their tag number
  // instead of the order in .proto. Set this to false to keep the .proto order.
  // The default value will probably change to false in nanopb-0.5.0.
  optional bool sort_by_tag = 28 [default = true];
}

// Extensions to protoc 'Descriptor' type in order to define options
// inside a .proto file.
//
// Protocol Buffers extension number registry
// --------------------------------
// Project:  Nanopb
// Contact:  Petteri Aimonen <jpa@kapsi.fi>
// Web site: http://kapsi.fi/~jpa/nanopb
// Extensions: 1010 (all types)
// --------------------------------

extend google.protobuf.FileOptions {
    optional NanoPBOptions nanopb_fileopt = 1010;
}

extend google.protobuf.MessageOptions {
    optional NanoPBOptions nanopb_msgopt = 1010;
}

extend google.protobuf.EnumOptions {
    optional NanoPBOptions nanopb_enumopt = 1010;
}

extend google.protobuf.FieldOptions {
    optional NanoPBOptions nanopb = 1010;
}