// Protocol Buffers - Google's data interchange format // Copyright 2024 Google LLC. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file or at // https://developers.google.com/open-source/licenses/bsd use super::opaque_pointee::opaque_pointee; use super::{ upb_ExtensionRegistry, upb_MiniTable, upb_MiniTableField, RawArena, RawArray, RawMap, StringView, }; use core::ptr::NonNull; opaque_pointee!(upb_Message); pub type RawMessage = NonNull; extern "C" { /// # Safety /// - `mini_table` and `arena` must be valid to deref pub fn upb_Message_New(mini_table: *const upb_MiniTable, arena: RawArena) -> Option; /// # Safety /// - `m` and `mini_table` must be valid to deref /// - `mini_table` must be the MiniTable associated with `m` pub fn upb_Message_Clear(m: RawMessage, mini_table: *const upb_MiniTable); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a field associated with `f` pub fn upb_Message_ClearBaseField(m: RawMessage, f: *const upb_MiniTableField); /// # Safety /// - All four arguments must be valid to deref /// - `mini_table` must be the MiniTable associated with both `dst` and /// `src` pub fn upb_Message_DeepCopy( dst: RawMessage, src: RawMessage, mini_table: *const upb_MiniTable, arena: RawArena, ); /// # Safety /// - All three arguments must be valid to deref /// - `mini_table` must be the MiniTable associated with `m` pub fn upb_Message_DeepClone( m: RawMessage, mini_table: *const upb_MiniTable, arena: RawArena, ) -> Option; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a bool field associated with `m` pub fn upb_Message_GetBool( m: RawMessage, f: *const upb_MiniTableField, default_val: bool, ) -> bool; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an i32 field associated with `m` pub fn upb_Message_GetInt32( m: RawMessage, f: *const upb_MiniTableField, default_val: i32, ) -> i32; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an i64 field associated with `m` pub fn upb_Message_GetInt64( m: RawMessage, f: *const upb_MiniTableField, default_val: i64, ) -> i64; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a u32 field associated with `m` pub fn upb_Message_GetUInt32( m: RawMessage, f: *const upb_MiniTableField, default_val: u32, ) -> u32; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a u64 field associated with `m` pub fn upb_Message_GetUInt64( m: RawMessage, f: *const upb_MiniTableField, default_val: u64, ) -> u64; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a f32 field associated with `m` pub fn upb_Message_GetFloat( m: RawMessage, f: *const upb_MiniTableField, default_val: f32, ) -> f32; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a f64 field associated with `m` pub fn upb_Message_GetDouble( m: RawMessage, f: *const upb_MiniTableField, default_val: f64, ) -> f64; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a string or bytes field associated with `m` pub fn upb_Message_GetString( m: RawMessage, f: *const upb_MiniTableField, default_val: StringView, ) -> StringView; /// Gets the const upb_Message* that is assigned to the field. /// /// This may return None which must be treated the same as if it returned /// Some of a valid RawMessage that is was the default message instance. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a message-typed field associated with `m` pub fn upb_Message_GetMessage( m: RawMessage, f: *const upb_MiniTableField, ) -> Option; /// Gets or creates a mutable upb_Message* assigned to the corresponding /// field in the message. /// /// This will only return None if the Arena allocation fails. /// /// # Safety /// - All arguments must be valid to deref /// - `mini_table` must be the MiniTable associated with `m` /// - `f` must be a message-typed field associated with `m` pub fn upb_Message_GetOrCreateMutableMessage( m: RawMessage, mini_table: *const upb_MiniTable, f: *const upb_MiniTableField, arena: RawArena, ) -> Option; /// Gets the const upb_Array* that is assigned to the field. /// /// This may return None which must be treated the same as if it returned /// Some of a valid RawArray that is empty. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a repeated field associated with `m` pub fn upb_Message_GetArray(m: RawMessage, f: *const upb_MiniTableField) -> Option; /// Gets or creates a mutable upb_Array* assigned to the corresponding field /// in the message. /// /// This will only return None if the Arena allocation fails. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a map field associated with `m` pub fn upb_Message_GetOrCreateMutableArray( m: RawMessage, f: *const upb_MiniTableField, arena: RawArena, ) -> Option; /// Gets the const upb_Map* that is assigned to the field. /// /// This may return None which must be treated the same as if it returned /// Some of a valid RawMap that is empty. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a repeated field associated with `m` pub fn upb_Message_GetMap(m: RawMessage, f: *const upb_MiniTableField) -> Option; /// Gets or creates a mutable upb_Map* assigned to the corresponding field /// in the message. /// /// This will only return None if the Arena allocation fails. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `map_entry_mini_table` must be the MiniTable associated with `f` /// - `f` must be a map field associated with `m` pub fn upb_Message_GetOrCreateMutableMap( m: RawMessage, map_entry_mini_table: *const upb_MiniTable, f: *const upb_MiniTableField, arena: RawArena, ) -> Option; /// # Safety /// - `m` and `f` must be valid to deref /// - `mini_table` must be the MiniTable associated with `m` pub fn upb_Message_HasBaseField(m: RawMessage, f: *const upb_MiniTableField) -> bool; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a field associated with `m` /// - `val` must be a pointer to legally readable memory of the correct type /// for the field described by `f` pub fn upb_Message_SetBaseField( m: RawMessage, f: *const upb_MiniTableField, val: *const core::ffi::c_void, ); /// # Safety /// - All four arguments must be valid to deref /// - `mini_table` must be the MiniTable associated with both `m1` and `m2` pub fn upb_Message_IsEqual( m1: RawMessage, m2: RawMessage, mini_table: *const upb_MiniTable, options: i32, ) -> bool; /// # Safety /// - `dst`, `src`, `mini_table` and `arena` must be valid to deref /// - `extreg` must be valid to deref or nullptr /// - `mini_table` must be the MiniTable associated with both `dst` and /// `src` pub fn upb_Message_MergeFrom( dst: RawMessage, src: RawMessage, mini_table: *const upb_MiniTable, extreg: *const upb_ExtensionRegistry, arena: RawArena, ) -> bool; /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a bool field associated with `f` pub fn upb_Message_SetBaseFieldBool(m: RawMessage, f: *const upb_MiniTableField, val: bool); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an i32 field associated with `m` pub fn upb_Message_SetBaseFieldInt32(m: RawMessage, f: *const upb_MiniTableField, val: i32); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an i64 field associated with `m` pub fn upb_Message_SetBaseFieldInt64(m: RawMessage, f: *const upb_MiniTableField, val: i64); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a u32 field associated with `m` pub fn upb_Message_SetBaseFieldUInt32(m: RawMessage, f: *const upb_MiniTableField, val: u32); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a u64 field associated with `m` pub fn upb_Message_SetBaseFieldUInt64(m: RawMessage, f: *const upb_MiniTableField, val: u64); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an f32 field associated with `m` pub fn upb_Message_SetBaseFieldFloat(m: RawMessage, f: *const upb_MiniTableField, val: f32); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an f64 field associated with `m` pub fn upb_Message_SetBaseFieldDouble(m: RawMessage, f: *const upb_MiniTableField, val: f64); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be an string or bytes field associated with `m` pub fn upb_Message_SetBaseFieldString( m: RawMessage, f: *const upb_MiniTableField, val: StringView, ); /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a message-typed field associated with `m` pub fn upb_Message_SetBaseFieldMessage( m: RawMessage, f: *const upb_MiniTableField, val: RawMessage, ); /// Returns the field number of which oneof field is set, or 0 if none are. /// `f` is any arbitrary field contained within the oneof. /// /// # Safety /// - `m` and `f` must be valid to deref /// - `f` must be a field within a oneof associated with `m` pub fn upb_Message_WhichOneofFieldNumber(m: RawMessage, f: *const upb_MiniTableField) -> u32; } #[cfg(test)] mod tests { use super::*; #[test] fn assert_message_linked() { use super::super::assert_linked; assert_linked!(upb_Message_New); assert_linked!(upb_Message_Clear); assert_linked!(upb_Message_ClearBaseField); assert_linked!(upb_Message_DeepCopy); assert_linked!(upb_Message_DeepClone); assert_linked!(upb_Message_GetBool); assert_linked!(upb_Message_GetInt32); assert_linked!(upb_Message_GetInt64); assert_linked!(upb_Message_GetUInt32); assert_linked!(upb_Message_GetUInt64); assert_linked!(upb_Message_GetFloat); assert_linked!(upb_Message_GetDouble); assert_linked!(upb_Message_GetString); assert_linked!(upb_Message_GetMessage); assert_linked!(upb_Message_GetOrCreateMutableMessage); assert_linked!(upb_Message_GetArray); assert_linked!(upb_Message_GetOrCreateMutableArray); assert_linked!(upb_Message_GetMap); assert_linked!(upb_Message_GetOrCreateMutableMap); assert_linked!(upb_Message_HasBaseField); assert_linked!(upb_Message_SetBaseField); assert_linked!(upb_Message_IsEqual); assert_linked!(upb_Message_MergeFrom); assert_linked!(upb_Message_SetBaseFieldBool); assert_linked!(upb_Message_SetBaseFieldInt32); assert_linked!(upb_Message_SetBaseFieldInt64); assert_linked!(upb_Message_SetBaseFieldUInt32); assert_linked!(upb_Message_SetBaseFieldUInt64); assert_linked!(upb_Message_SetBaseFieldFloat); assert_linked!(upb_Message_SetBaseFieldDouble); assert_linked!(upb_Message_SetBaseFieldString); assert_linked!(upb_Message_SetBaseFieldMessage); assert_linked!(upb_Message_WhichOneofFieldNumber); } }