|
|
|
// 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);
|
|
|
|
}
|
|
|
|
}
|