blob: ef434b306d5b681d29687f4b750d4308084175ea [file] [log] [blame] [edit]
// Protocol Buffers - Google's data interchange format
// Copyright 2023 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
//! UPB FFI wrapper code for use by Rust Protobuf.
pub mod conversions;
pub mod map;
pub mod message;
pub mod minitable;
pub mod repeated;
pub mod string;
pub use conversions::*;
pub use map::*;
pub use message::*;
pub use minitable::*;
pub use repeated::*;
pub use string::*;
use crate::__internal::entity_tag::*;
use crate::__internal::{EntityType, MatcherEq, Private, SealedInternal};
use crate::{
AsMut, AsView, Clear, ClearAndParse, CopyFrom, IntoProxied, Map, MapIter, MapMut, MapValue,
MapView, MergeFrom, Message, MessageMut, MessageMutInterop, MessageView, MessageViewInterop,
Mut, OwnedMessageInterop, ParseError, ProtoBytes, ProtoStr, ProtoString, Proxied, Repeated,
RepeatedMut, RepeatedView, Serialize, SerializeError, Singular, TakeFrom, View,
};
use std::fmt::Debug;
use std::marker::PhantomData;
use std::mem::{size_of, ManuallyDrop, MaybeUninit};
use std::ptr::{self, NonNull};
use std::slice;
use std::sync::OnceLock;
#[cfg(bzl)]
extern crate upb;
#[cfg(not(bzl))]
use crate::upb;
pub use upb::Arena;
pub use upb::AssociatedMiniTable;
pub use upb::AssociatedMiniTableEnum;
pub use upb::MessagePtr;
pub type MiniTablePtr = upb::RawMiniTable;
pub type MiniTableEnumPtr = upb::RawMiniTableEnum;
use upb::*;
pub fn debug_string<T: UpbGetMessagePtr>(msg: &T) -> String {
let ptr = msg.get_ptr(Private);
// SAFETY: `ptr` is legally dereferenceable.
unsafe { upb::debug_string(ptr) }
}
pub(crate) type RawRepeatedField = upb::RawArray;
pub(crate) type RawMap = upb::RawMap;
pub(crate) type PtrAndLen = upb::StringView;
/// A trait implemented by types which are allowed as keys in maps.
/// This is all types for fields except for repeated, maps, bytes, messages, enums and floating point types.
/// This trait is defined separately in cpp.rs and upb.rs to be able to set better subtrait bounds.
#[doc(hidden)]
pub trait MapKey: Proxied + EntityType + UpbTypeConversions<Self::Tag> + SealedInternal {}
thread_local! {
// We need to avoid dropping this Arena, because we use it to build mini tables that
// effectively have 'static lifetimes.
pub static THREAD_LOCAL_ARENA: ManuallyDrop<Arena> = ManuallyDrop::new(Arena::new());
}
pub mod __unstable {
// Stores a serialized FileDescriptorProto, along with references to its dependencies.
pub struct DescriptorInfo {
// The serialized FileDescriptorProto.
pub descriptor: &'static [u8],
// A reference to the DescriptorInfo associated with each .proto file that the current one
// imports.
pub deps: &'static [&'static DescriptorInfo],
}
}