DCCL v4
option_extensions.proto
1 // Copyright 2010-2023:
2 // GobySoft, LLC (2013-)
3 // Massachusetts Institute of Technology (2007-2014)
4 // Community contributors (see AUTHORS file)
5 // File authors:
6 // Toby Schneider <toby@gobysoft.org>
7 // Chris Murphy <cmurphy@aphysci.com>
8 //
9 //
10 // This file is part of the Dynamic Compact Control Language Library
11 // ("DCCL").
12 //
13 // DCCL is free software: you can redistribute it and/or modify
14 // it under the terms of the GNU Lesser General Public License as published by
15 // the Free Software Foundation, either version 2.1 of the License, or
16 // (at your option) any later version.
17 //
18 // DCCL is distributed in the hope that it will be useful,
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 // GNU Lesser General Public License for more details.
22 //
23 // You should have received a copy of the GNU Lesser General Public License
24 // along with DCCL. If not, see <http://www.gnu.org/licenses/>.
25 syntax = "proto2";
26 
27 import "google/protobuf/descriptor.proto";
28 
29 // Email from liujisi@google.com on 10.02.2012: Feel free to use 1012 for all
30 // types of options.
31 //--------------------------------
32 // Project: Dynamic Compact Control Language
33 // Contact: Toby Schneider <tes@mit.edu>
34 // Web site: https://launchpad.net/dccl
35 // Extensions: 1012 (all types)
36 //--------------------------------
37 package dccl;
38 
39 extend .google.protobuf.FieldOptions
40 {
41  optional DCCLFieldOptions field = 1012;
42 }
43 
44 extend .google.protobuf.MessageOptions
45 {
46  optional DCCLMessageOptions msg = 1012;
47 }
48 
49 message DCCLFieldOptions
50 {
51  // what encoder / decoder should we use?
52  optional string codec = 1 [default = "dccl.default2"];
53  // leave this field out of DCCL transmissions (has_field() will be false on
54  // receipt)
55  optional bool omit = 2 [default = false];
56  // set true for fields in the header (will *not* be encrypte)d
57  optional bool in_head = 3 [default = false];
58 
59  // double, float
60  optional int32 precision = 4 [default = 0]; // Deprecated
61  optional double resolution = 12 [default = 1];
62  // int, double, float
63  optional double min = 5;
64  optional double max = 6;
65 
66  // time ("1 day" can encode times 12h before or after the receiver's time)
67  optional uint32 num_days = 7 [default = 1];
68 
69  // static
70  optional string static_value = 8 [default = ""];
71 
72  // string, bytes
73  optional uint32 max_length = 9;
74 
75  // any `repeated` field
76  optional uint32 max_repeat = 10;
77  optional uint32 min_repeat = 13 [default = 0];
78 
79  // enum
80  optional bool packed_enum = 11 [default = true];
81 
82  optional string description = 20;
83 
84  message Units
85  {
86  // units
87  optional string base_dimensions = 1;
88  optional string derived_dimensions = 2;
89  optional string system = 3 [default = "si"];
90  optional bool relative_temperature = 4 [default = false];
91  optional string unit = 5;
92  optional string prefix = 6;
93  }
94  optional Units units = 30;
95 
96  // runtime contents-based conditionals
97  message Conditions
98  {
99  optional string required_if = 1;
100  optional string omit_if = 2;
101  optional string only_if = 3;
102  optional string min = 10;
103  optional string max = 11;
104  }
105 
106  optional Conditions dynamic_conditions = 40;
107 
108  // ccl = 1000
109  // arithmetic = 1001
110  extensions 1000 to max;
111 }
112 
113 message DCCLMessageOptions
114 {
115  optional int32 id = 1;
116  optional uint32 max_bytes = 2;
117 
118  optional string codec = 3;
119 
120  optional string codec_group = 4;
121  optional int32 codec_version = 5;
122 
123  optional bool omit_id = 10 [default = false];
124 
125  optional string unit_system = 30 [default = "si"];
126 }