DCCL v4
test.proto
1 // Copyright 2019-2022:
2 // GobySoft, LLC (2013-)
3 // Community contributors (see AUTHORS file)
4 // File authors:
5 // Toby Schneider <toby@gobysoft.org>
6 // Davide Fenucci <davfen@noc.ac.uk>
7 //
8 //
9 // This file is part of the Dynamic Compact Control Language Library
10 // ("DCCL").
11 //
12 // DCCL is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU Lesser General Public License as published by
14 // the Free Software Foundation, either version 2.1 of the License, or
15 // (at your option) any later version.
16 //
17 // DCCL is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU Lesser General Public License for more details.
21 //
22 // You should have received a copy of the GNU Lesser General Public License
23 // along with DCCL. If not, see <http://www.gnu.org/licenses/>.
24 syntax = "proto2";
25 
26 import "dccl/option_extensions.proto";
27 
28 package dccl.test;
29 
30 message EmbeddedMsg1
31 {
32  optional double val = 1 [
33  (dccl.field).min = 0,
34  (dccl.field).max = 126,
35  (dccl.field).precision = 3
36  ];
37 }
38 
39 message TestMsg
40 {
41  option (dccl.msg).id = 2;
42  option (dccl.msg).max_bytes = 32;
43  option (dccl.msg).codec_version = 4;
44 
45  enum E
46  {
47  VALUE1 = 1;
48  VALUE2 = 2;
49  }
50 
51  required E e = 5;
52  optional double d = 6
53  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
54 
55  oneof test_oneof1
56  {
57  double double_oneof1 = 118 [
58  (dccl.field).min = -100,
59  (dccl.field).max = 126,
60  (dccl.field).precision = 2
61  ];
62 
63  EmbeddedMsg1 msg_oneof1 = 119;
64  }
65 
66  oneof test_oneof2
67  {
68  int32 int32_oneof2 = 120
69  [(dccl.field).min = -20, (dccl.field).max = 3000];
70  EmbeddedMsg1 msg_oneof2 = 121;
71  }
72 
73  optional uint32 hash_opt = 200 [
74  (dccl.field).codec = "dccl.hash",
75  (dccl.field).max = 0xFFFF // 16 bits
76  ];
77  required uint32 hash_req = 201 [
78  (dccl.field).codec = "dccl.hash",
79  (dccl.field).max = 0xFFFFFFFF // 32 bits
80  ];
81 }
82 
83 message TestMsgNoHashableChanges
84 {
85  option (dccl.msg).id = 2;
86  option (dccl.msg).max_bytes = 64;
87  option (dccl.msg).codec_version = 4;
88 
89  enum E
90  {
91  VALUE1 = 1;
92  VALUE2 = 2;
93  }
94 
95  required E e = 5;
96  optional double d = 6
97  [default = 2.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
98 
99  oneof test_oneof1
100  {
101  double double_oneof1 = 118 [
102  (dccl.field).min = -100,
103  (dccl.field).max = 126,
104  (dccl.field).precision = 2
105  ];
106 
107  EmbeddedMsg1 msg_oneof1 = 119;
108  }
109 
110  oneof test_oneof2
111  {
112  int32 int32_oneof2 = 120
113  [(dccl.field).min = -20, (dccl.field).max = 3000];
114  EmbeddedMsg1 msg_oneof2 = 121;
115  }
116  optional uint32 hash_opt = 200 [
117  (dccl.field).codec = "dccl.hash",
118  (dccl.field).max = 0xFFFF // 16 bits
119  ];
120  required uint32 hash_req = 201 [
121  (dccl.field).codec = "dccl.hash",
122  (dccl.field).max = 0xFFFFFFFF // 32 bits
123  ];
124 }
125 
126 message TestMsgNewID
127 {
128  option (dccl.msg).id = 3;
129  option (dccl.msg).max_bytes = 32;
130  option (dccl.msg).codec_version = 4;
131 
132  enum E
133  {
134  VALUE1 = 1;
135  VALUE2 = 2;
136  }
137 
138  required E e = 5;
139  optional double d = 6
140  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
141 
142  oneof test_oneof1
143  {
144  double double_oneof1 = 118 [
145  (dccl.field).min = -100,
146  (dccl.field).max = 126,
147  (dccl.field).precision = 2
148  ];
149 
150  EmbeddedMsg1 msg_oneof1 = 119;
151  }
152 
153  oneof test_oneof2
154  {
155  int32 int32_oneof2 = 120
156  [(dccl.field).min = -20, (dccl.field).max = 3000];
157  EmbeddedMsg1 msg_oneof2 = 121;
158  }
159  optional uint32 hash_opt = 200 [
160  (dccl.field).codec = "dccl.hash",
161  (dccl.field).max = 0xFFFF // 16 bits
162  ];
163  required uint32 hash_req = 201 [
164  (dccl.field).codec = "dccl.hash",
165  (dccl.field).max = 0xFFFFFFFF // 32 bits
166  ];
167 }
168 
169 message TestMsgNewEnum
170 {
171  option (dccl.msg).id = 2;
172  option (dccl.msg).max_bytes = 32;
173  option (dccl.msg).codec_version = 4;
174 
175  enum E
176  {
177  VALUE1 = 1;
178  VALUE2 = 2;
179  VALUE3 = 3;
180  }
181 
182  required E e = 5;
183  optional double d = 6
184  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
185 
186  oneof test_oneof1
187  {
188  double double_oneof1 = 118 [
189  (dccl.field).min = -100,
190  (dccl.field).max = 126,
191  (dccl.field).precision = 2
192  ];
193 
194  EmbeddedMsg1 msg_oneof1 = 119;
195  }
196 
197  oneof test_oneof2
198  {
199  int32 int32_oneof2 = 120
200  [(dccl.field).min = -20, (dccl.field).max = 3000];
201  EmbeddedMsg1 msg_oneof2 = 121;
202  }
203  optional uint32 hash_opt = 200 [
204  (dccl.field).codec = "dccl.hash",
205  (dccl.field).max = 0xFFFF // 16 bits
206  ];
207  required uint32 hash_req = 201 [
208  (dccl.field).codec = "dccl.hash",
209  (dccl.field).max = 0xFFFFFFFF // 32 bits
210  ];
211 }
212 
213 message TestMsgNewBounds
214 {
215  option (dccl.msg).id = 2;
216  option (dccl.msg).max_bytes = 32;
217  option (dccl.msg).codec_version = 4;
218 
219  enum E
220  {
221  VALUE1 = 1;
222  VALUE2 = 2;
223  }
224 
225  required E e = 5;
226  optional double d = 6
227  [default = 1.5, (dccl.field) = { min: -1, max: 10, precision: 1 }];
228 
229  oneof test_oneof1
230  {
231  double double_oneof1 = 118 [
232  (dccl.field).min = -100,
233  (dccl.field).max = 126,
234  (dccl.field).precision = 2
235  ];
236 
237  EmbeddedMsg1 msg_oneof1 = 119;
238  }
239 
240  oneof test_oneof2
241  {
242  int32 int32_oneof2 = 120
243  [(dccl.field).min = -20, (dccl.field).max = 3000];
244  EmbeddedMsg1 msg_oneof2 = 121;
245  }
246 
247  optional uint32 hash_opt = 200 [
248  (dccl.field).codec = "dccl.hash",
249  (dccl.field).max = 0xFFFF // 16 bits
250  ];
251  required uint32 hash_req = 201 [
252  (dccl.field).codec = "dccl.hash",
253  (dccl.field).max = 0xFFFFFFFF // 32 bits
254  ];
255 }
256 
257 message TestMsgV2
258 {
259  option (dccl.msg).id = 2;
260  option (dccl.msg).max_bytes = 32;
261  option (dccl.msg).codec_version = 2;
262 
263  enum E
264  {
265  VALUE1 = 1;
266  VALUE2 = 2;
267  }
268 
269  required E e = 5;
270  optional double d = 6
271  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
272 }
273 
274 message TestMsgV3
275 {
276  option (dccl.msg).id = 2;
277  option (dccl.msg).max_bytes = 32;
278  option (dccl.msg).codec_version = 3;
279 
280  enum E
281  {
282  VALUE1 = 1;
283  VALUE2 = 2;
284  }
285 
286  required E e = 5;
287  optional double d = 6
288  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
289 }
290 
291 message TestMsgV4
292 {
293  option (dccl.msg).id = 2;
294  option (dccl.msg).max_bytes = 32;
295  option (dccl.msg).codec_version = 4;
296 
297  enum E
298  {
299  VALUE1 = 1;
300  VALUE2 = 2;
301  }
302 
303  required E e = 5;
304  optional double d = 6
305  [default = 1.5, (dccl.field) = { min: 0, max: 10, precision: 1 }];
306 }
307 
308 message TestMsgMultiHash
309 {
310  option (dccl.msg).id = 3;
311  option (dccl.msg).max_bytes = 32;
312  option (dccl.msg).codec_version = 4;
313 
314  // selection of odd sized hashes
315 
316  optional uint32 hash4 = 1
317  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 0xF];
318 
319  optional uint32 hash6 = 2
320  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 0x3F];
321 
322  optional uint32 hash8 = 3
323  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 0xFF];
324 
325  optional uint32 hash13 = 4
326  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 0x1FFF];
327 
328  optional uint32 hash26 = 5
329  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 0X3ffffff];
330 }
331 
332 message TestMsgHashMaxTooLarge
333 {
334  option (dccl.msg).id = 3;
335  option (dccl.msg).max_bytes = 32;
336  option (dccl.msg).codec_version = 4;
337 
338  // too large
339  optional uint32 hash34 = 1
340  [(dccl.field).codec = "dccl.hash", (dccl.field).max = 17179869183];
341 }