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