• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2024 Google LLC.  All rights reserved.
3 //
4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd
7 
8 use super::opaque_pointee::opaque_pointee;
9 use super::{
10     upb_ExtensionRegistry, upb_MiniTable, upb_MiniTableField, RawArena, RawArray, RawMap,
11     StringView,
12 };
13 use core::ptr::NonNull;
14 
15 opaque_pointee!(upb_Message);
16 pub type RawMessage = NonNull<upb_Message>;
17 
18 extern "C" {
19     /// # Safety
20     /// - `mini_table` and `arena` must be valid to deref
upb_Message_New(mini_table: *const upb_MiniTable, arena: RawArena) -> Option<RawMessage>21     pub fn upb_Message_New(mini_table: *const upb_MiniTable, arena: RawArena)
22     -> Option<RawMessage>;
23 
24     /// # Safety
25     /// - `m` and `mini_table` must be valid to deref
26     /// - `mini_table` must be the MiniTable associated with `m`
upb_Message_Clear(m: RawMessage, mini_table: *const upb_MiniTable)27     pub fn upb_Message_Clear(m: RawMessage, mini_table: *const upb_MiniTable);
28 
29     /// # Safety
30     /// - `m` and `f` must be valid to deref
31     /// - `f` must be a field associated with `f`
upb_Message_ClearBaseField(m: RawMessage, f: *const upb_MiniTableField)32     pub fn upb_Message_ClearBaseField(m: RawMessage, f: *const upb_MiniTableField);
33 
34     /// # Safety
35     /// - All four arguments must be valid to deref
36     /// - `mini_table` must be the MiniTable associated with both `dst` and
37     ///   `src`
upb_Message_DeepCopy( dst: RawMessage, src: RawMessage, mini_table: *const upb_MiniTable, arena: RawArena, )38     pub fn upb_Message_DeepCopy(
39         dst: RawMessage,
40         src: RawMessage,
41         mini_table: *const upb_MiniTable,
42         arena: RawArena,
43     );
44 
45     /// # Safety
46     /// - All three arguments must be valid to deref
47     /// - `mini_table` must be the MiniTable associated with `m`
upb_Message_DeepClone( m: RawMessage, mini_table: *const upb_MiniTable, arena: RawArena, ) -> Option<RawMessage>48     pub fn upb_Message_DeepClone(
49         m: RawMessage,
50         mini_table: *const upb_MiniTable,
51         arena: RawArena,
52     ) -> Option<RawMessage>;
53 
54     /// # Safety
55     /// - `m` and `f` must be valid to deref
56     /// - `f` must be a bool field associated with `m`
upb_Message_GetBool( m: RawMessage, f: *const upb_MiniTableField, default_val: bool, ) -> bool57     pub fn upb_Message_GetBool(
58         m: RawMessage,
59         f: *const upb_MiniTableField,
60         default_val: bool,
61     ) -> bool;
62 
63     /// # Safety
64     /// - `m` and `f` must be valid to deref
65     /// - `f` must be an i32 field associated with `m`
upb_Message_GetInt32( m: RawMessage, f: *const upb_MiniTableField, default_val: i32, ) -> i3266     pub fn upb_Message_GetInt32(
67         m: RawMessage,
68         f: *const upb_MiniTableField,
69         default_val: i32,
70     ) -> i32;
71 
72     /// # Safety
73     /// - `m` and `f` must be valid to deref
74     /// - `f` must be an i64 field associated with `m`
upb_Message_GetInt64( m: RawMessage, f: *const upb_MiniTableField, default_val: i64, ) -> i6475     pub fn upb_Message_GetInt64(
76         m: RawMessage,
77         f: *const upb_MiniTableField,
78         default_val: i64,
79     ) -> i64;
80 
81     /// # Safety
82     /// - `m` and `f` must be valid to deref
83     /// - `f` must be a u32 field associated with `m`
upb_Message_GetUInt32( m: RawMessage, f: *const upb_MiniTableField, default_val: u32, ) -> u3284     pub fn upb_Message_GetUInt32(
85         m: RawMessage,
86         f: *const upb_MiniTableField,
87         default_val: u32,
88     ) -> u32;
89 
90     /// # Safety
91     /// - `m` and `f` must be valid to deref
92     /// - `f` must be a u64 field associated with `m`
upb_Message_GetUInt64( m: RawMessage, f: *const upb_MiniTableField, default_val: u64, ) -> u6493     pub fn upb_Message_GetUInt64(
94         m: RawMessage,
95         f: *const upb_MiniTableField,
96         default_val: u64,
97     ) -> u64;
98 
99     /// # Safety
100     /// - `m` and `f` must be valid to deref
101     /// - `f` must be a f32 field associated with `m`
upb_Message_GetFloat( m: RawMessage, f: *const upb_MiniTableField, default_val: f32, ) -> f32102     pub fn upb_Message_GetFloat(
103         m: RawMessage,
104         f: *const upb_MiniTableField,
105         default_val: f32,
106     ) -> f32;
107 
108     /// # Safety
109     /// - `m` and `f` must be valid to deref
110     /// - `f` must be a f64 field associated with `m`
upb_Message_GetDouble( m: RawMessage, f: *const upb_MiniTableField, default_val: f64, ) -> f64111     pub fn upb_Message_GetDouble(
112         m: RawMessage,
113         f: *const upb_MiniTableField,
114         default_val: f64,
115     ) -> f64;
116 
117     /// # Safety
118     /// - `m` and `f` must be valid to deref
119     /// - `f` must be a string or bytes field associated with `m`
upb_Message_GetString( m: RawMessage, f: *const upb_MiniTableField, default_val: StringView, ) -> StringView120     pub fn upb_Message_GetString(
121         m: RawMessage,
122         f: *const upb_MiniTableField,
123         default_val: StringView,
124     ) -> StringView;
125 
126     /// Gets the const upb_Message* that is assigned to the field.
127     ///
128     /// This may return None which must be treated the same as if it returned
129     /// Some of a valid RawMessage that is was the default message instance.
130     ///
131     /// # Safety
132     /// - `m` and `f` must be valid to deref
133     /// - `f` must be a message-typed field associated with `m`
upb_Message_GetMessage( m: RawMessage, f: *const upb_MiniTableField, ) -> Option<RawMessage>134     pub fn upb_Message_GetMessage(
135         m: RawMessage,
136         f: *const upb_MiniTableField,
137     ) -> Option<RawMessage>;
138 
139     /// Gets or creates a mutable upb_Message* assigned to the corresponding
140     /// field in the message.
141     ///
142     /// This will only return None if the Arena allocation fails.
143     ///
144     /// # Safety
145     /// - All arguments must be valid to deref
146     /// - `mini_table` must be the MiniTable associated with `m`
147     /// - `f` must be a message-typed field associated with `m`
upb_Message_GetOrCreateMutableMessage( m: RawMessage, mini_table: *const upb_MiniTable, f: *const upb_MiniTableField, arena: RawArena, ) -> Option<RawMessage>148     pub fn upb_Message_GetOrCreateMutableMessage(
149         m: RawMessage,
150         mini_table: *const upb_MiniTable,
151         f: *const upb_MiniTableField,
152         arena: RawArena,
153     ) -> Option<RawMessage>;
154 
155     /// Gets the const upb_Array* that is assigned to the field.
156     ///
157     /// This may return None which must be treated the same as if it returned
158     /// Some of a valid RawArray that is empty.
159     ///
160     /// # Safety
161     /// - `m` and `f` must be valid to deref
162     /// - `f` must be a repeated field associated with `m`
upb_Message_GetArray(m: RawMessage, f: *const upb_MiniTableField) -> Option<RawArray>163     pub fn upb_Message_GetArray(m: RawMessage, f: *const upb_MiniTableField) -> Option<RawArray>;
164 
165     /// Gets or creates a mutable upb_Array* assigned to the corresponding field
166     /// in the message.
167     ///
168     /// This will only return None if the Arena allocation fails.
169     ///
170     /// # Safety
171     /// - `m` and `f` must be valid to deref
172     /// - `f` must be a map field associated with `m`
upb_Message_GetOrCreateMutableArray( m: RawMessage, f: *const upb_MiniTableField, arena: RawArena, ) -> Option<RawArray>173     pub fn upb_Message_GetOrCreateMutableArray(
174         m: RawMessage,
175         f: *const upb_MiniTableField,
176         arena: RawArena,
177     ) -> Option<RawArray>;
178 
179     /// Gets the const upb_Map* that is assigned to the field.
180     ///
181     /// This may return None which must be treated the same as if it returned
182     /// Some of a valid RawMap that is empty.
183     ///
184     /// # Safety
185     /// - `m` and `f` must be valid to deref
186     /// - `f` must be a repeated field associated with `m`
upb_Message_GetMap(m: RawMessage, f: *const upb_MiniTableField) -> Option<RawMap>187     pub fn upb_Message_GetMap(m: RawMessage, f: *const upb_MiniTableField) -> Option<RawMap>;
188 
189     /// Gets or creates a mutable upb_Map* assigned to the corresponding field
190     /// in the message.
191     ///
192     /// This will only return None if the Arena allocation fails.
193     ///
194     /// # Safety
195     /// - `m` and `f` must be valid to deref
196     /// - `map_entry_mini_table` must be the MiniTable associated with `f`
197     /// - `f` must be a map field associated with `m`
upb_Message_GetOrCreateMutableMap( m: RawMessage, map_entry_mini_table: *const upb_MiniTable, f: *const upb_MiniTableField, arena: RawArena, ) -> Option<RawMap>198     pub fn upb_Message_GetOrCreateMutableMap(
199         m: RawMessage,
200         map_entry_mini_table: *const upb_MiniTable,
201         f: *const upb_MiniTableField,
202         arena: RawArena,
203     ) -> Option<RawMap>;
204 
205     /// # Safety
206     /// - `m` and `f` must be valid to deref
207     /// - `mini_table` must be the MiniTable associated with `m`
upb_Message_HasBaseField(m: RawMessage, f: *const upb_MiniTableField) -> bool208     pub fn upb_Message_HasBaseField(m: RawMessage, f: *const upb_MiniTableField) -> bool;
209 
210     /// # Safety
211     /// - `m` and `f` must be valid to deref
212     /// - `f` must be a field associated with `m`
213     /// - `val` must be a pointer to legally readable memory of the correct type
214     ///   for the field described by `f`
upb_Message_SetBaseField( m: RawMessage, f: *const upb_MiniTableField, val: *const core::ffi::c_void, )215     pub fn upb_Message_SetBaseField(
216         m: RawMessage,
217         f: *const upb_MiniTableField,
218         val: *const core::ffi::c_void,
219     );
220 
221     /// # Safety
222     /// - All four arguments must be valid to deref
223     /// - `mini_table` must be the MiniTable associated with both `m1` and `m2`
upb_Message_IsEqual( m1: RawMessage, m2: RawMessage, mini_table: *const upb_MiniTable, options: i32, ) -> bool224     pub fn upb_Message_IsEqual(
225         m1: RawMessage,
226         m2: RawMessage,
227         mini_table: *const upb_MiniTable,
228         options: i32,
229     ) -> bool;
230 
231     /// # Safety
232     /// - `dst`, `src`, `mini_table` and `arena` must be valid to deref
233     /// - `extreg` must be valid to deref or nullptr
234     /// - `mini_table` must be the MiniTable associated with both `dst` and
235     ///   `src`
upb_Message_MergeFrom( dst: RawMessage, src: RawMessage, mini_table: *const upb_MiniTable, extreg: *const upb_ExtensionRegistry, arena: RawArena, ) -> bool236     pub fn upb_Message_MergeFrom(
237         dst: RawMessage,
238         src: RawMessage,
239         mini_table: *const upb_MiniTable,
240         extreg: *const upb_ExtensionRegistry,
241         arena: RawArena,
242     ) -> bool;
243 
244     /// # Safety
245     /// - `m` and `f` must be valid to deref
246     /// - `f` must be a bool field associated with `f`
upb_Message_SetBaseFieldBool(m: RawMessage, f: *const upb_MiniTableField, val: bool)247     pub fn upb_Message_SetBaseFieldBool(m: RawMessage, f: *const upb_MiniTableField, val: bool);
248 
249     /// # Safety
250     /// - `m` and `f` must be valid to deref
251     /// - `f` must be an i32 field associated with `m`
upb_Message_SetBaseFieldInt32(m: RawMessage, f: *const upb_MiniTableField, val: i32)252     pub fn upb_Message_SetBaseFieldInt32(m: RawMessage, f: *const upb_MiniTableField, val: i32);
253 
254     /// # Safety
255     /// - `m` and `f` must be valid to deref
256     /// - `f` must be an i64 field associated with `m`
upb_Message_SetBaseFieldInt64(m: RawMessage, f: *const upb_MiniTableField, val: i64)257     pub fn upb_Message_SetBaseFieldInt64(m: RawMessage, f: *const upb_MiniTableField, val: i64);
258 
259     /// # Safety
260     /// - `m` and `f` must be valid to deref
261     /// - `f` must be a u32 field associated with `m`
upb_Message_SetBaseFieldUInt32(m: RawMessage, f: *const upb_MiniTableField, val: u32)262     pub fn upb_Message_SetBaseFieldUInt32(m: RawMessage, f: *const upb_MiniTableField, val: u32);
263 
264     /// # Safety
265     /// - `m` and `f` must be valid to deref
266     /// - `f` must be a u64 field associated with `m`
upb_Message_SetBaseFieldUInt64(m: RawMessage, f: *const upb_MiniTableField, val: u64)267     pub fn upb_Message_SetBaseFieldUInt64(m: RawMessage, f: *const upb_MiniTableField, val: u64);
268 
269     /// # Safety
270     /// - `m` and `f` must be valid to deref
271     /// - `f` must be an f32 field associated with `m`
upb_Message_SetBaseFieldFloat(m: RawMessage, f: *const upb_MiniTableField, val: f32)272     pub fn upb_Message_SetBaseFieldFloat(m: RawMessage, f: *const upb_MiniTableField, val: f32);
273 
274     /// # Safety
275     /// - `m` and `f` must be valid to deref
276     /// - `f` must be an f64 field associated with `m`
upb_Message_SetBaseFieldDouble(m: RawMessage, f: *const upb_MiniTableField, val: f64)277     pub fn upb_Message_SetBaseFieldDouble(m: RawMessage, f: *const upb_MiniTableField, val: f64);
278 
279     /// # Safety
280     /// - `m` and `f` must be valid to deref
281     /// - `f` must be an string or bytes field associated with `m`
upb_Message_SetBaseFieldString( m: RawMessage, f: *const upb_MiniTableField, val: StringView, )282     pub fn upb_Message_SetBaseFieldString(
283         m: RawMessage,
284         f: *const upb_MiniTableField,
285         val: StringView,
286     );
287 
288     /// # Safety
289     /// - `m` and `f` must be valid to deref
290     /// - `f` must be a message-typed field associated with `m`
upb_Message_SetBaseFieldMessage( m: RawMessage, f: *const upb_MiniTableField, val: RawMessage, )291     pub fn upb_Message_SetBaseFieldMessage(
292         m: RawMessage,
293         f: *const upb_MiniTableField,
294         val: RawMessage,
295     );
296 
297     /// Returns the field number of which oneof field is set, or 0 if none are.
298     /// `f` is any arbitrary field contained within the oneof.
299     ///
300     /// # Safety
301     /// - `m` and `f` must be valid to deref
302     /// - `f` must be a field within a oneof associated with `m`
upb_Message_WhichOneofFieldNumber(m: RawMessage, f: *const upb_MiniTableField) -> u32303     pub fn upb_Message_WhichOneofFieldNumber(m: RawMessage, f: *const upb_MiniTableField) -> u32;
304 }
305 
306 #[cfg(test)]
307 mod tests {
308     use super::*;
309     use googletest::gtest;
310 
311     #[gtest]
assert_message_linked()312     fn assert_message_linked() {
313         use crate::assert_linked;
314         assert_linked!(upb_Message_New);
315         assert_linked!(upb_Message_Clear);
316         assert_linked!(upb_Message_ClearBaseField);
317         assert_linked!(upb_Message_DeepCopy);
318         assert_linked!(upb_Message_DeepClone);
319         assert_linked!(upb_Message_GetBool);
320         assert_linked!(upb_Message_GetInt32);
321         assert_linked!(upb_Message_GetInt64);
322         assert_linked!(upb_Message_GetUInt32);
323         assert_linked!(upb_Message_GetUInt64);
324         assert_linked!(upb_Message_GetFloat);
325         assert_linked!(upb_Message_GetDouble);
326         assert_linked!(upb_Message_GetString);
327         assert_linked!(upb_Message_GetMessage);
328         assert_linked!(upb_Message_GetOrCreateMutableMessage);
329         assert_linked!(upb_Message_GetArray);
330         assert_linked!(upb_Message_GetOrCreateMutableArray);
331         assert_linked!(upb_Message_GetMap);
332         assert_linked!(upb_Message_GetOrCreateMutableMap);
333         assert_linked!(upb_Message_HasBaseField);
334         assert_linked!(upb_Message_SetBaseField);
335         assert_linked!(upb_Message_IsEqual);
336         assert_linked!(upb_Message_MergeFrom);
337         assert_linked!(upb_Message_SetBaseFieldBool);
338         assert_linked!(upb_Message_SetBaseFieldInt32);
339         assert_linked!(upb_Message_SetBaseFieldInt64);
340         assert_linked!(upb_Message_SetBaseFieldUInt32);
341         assert_linked!(upb_Message_SetBaseFieldUInt64);
342         assert_linked!(upb_Message_SetBaseFieldFloat);
343         assert_linked!(upb_Message_SetBaseFieldDouble);
344         assert_linked!(upb_Message_SetBaseFieldString);
345         assert_linked!(upb_Message_SetBaseFieldMessage);
346         assert_linked!(upb_Message_WhichOneofFieldNumber);
347     }
348 }
349