Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
347 lines
12 KiB
347 lines
12 KiB
// 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<upb_Message>; |
|
|
|
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<RawMessage>; |
|
|
|
/// # 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<RawMessage>; |
|
|
|
/// # 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<RawMessage>; |
|
|
|
/// 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<RawMessage>; |
|
|
|
/// 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<RawArray>; |
|
|
|
/// 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<RawArray>; |
|
|
|
/// 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<RawMap>; |
|
|
|
/// 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<RawMap>; |
|
|
|
/// # 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); |
|
} |
|
}
|
|
|