|
|
|
// 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 crate::{RawArray, RawMap, RawMessage, StringView};
|
|
|
|
|
|
|
|
// Transcribed from google3/third_party/upb/upb/message/value.h
|
|
|
|
#[repr(C)]
|
|
|
|
#[derive(Clone, Copy)]
|
|
|
|
pub union upb_MessageValue {
|
|
|
|
pub bool_val: bool,
|
|
|
|
pub float_val: std::ffi::c_float,
|
|
|
|
pub double_val: std::ffi::c_double,
|
|
|
|
pub uint32_val: u32,
|
|
|
|
pub int32_val: i32,
|
|
|
|
pub uint64_val: u64,
|
|
|
|
pub int64_val: i64,
|
|
|
|
// TODO: Replace this `RawMessage` with the const type.
|
|
|
|
pub array_val: Option<RawArray>,
|
|
|
|
pub map_val: Option<RawMap>,
|
|
|
|
pub msg_val: Option<RawMessage>,
|
|
|
|
pub str_val: StringView,
|
|
|
|
|
|
|
|
tagged_msg_val: *const std::ffi::c_void,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl upb_MessageValue {
|
|
|
|
pub fn zeroed() -> Self {
|
|
|
|
// SAFETY: zero bytes is a valid representation for at least one value in the
|
|
|
|
// union (actually valid for all of them).
|
|
|
|
unsafe { std::mem::zeroed() }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[repr(C)]
|
|
|
|
#[derive(Clone, Copy)]
|
|
|
|
pub union upb_MutableMessageValue {
|
|
|
|
pub array: Option<RawArray>,
|
|
|
|
pub map: Option<RawMap>,
|
|
|
|
pub msg: Option<RawMessage>,
|
|
|
|
}
|