use super::*;
pub struct MiniTableInitPtr(pub MiniTablePtr);
unsafe impl Send for MiniTableInitPtr {}
unsafe impl Sync for MiniTableInitPtr {}
pub struct MiniTableEnumInitPtr(pub MiniTableEnumPtr);
unsafe impl Send for MiniTableEnumInitPtr {}
unsafe impl Sync for MiniTableEnumInitPtr {}
#[derive(Clone, Copy)]
pub struct MiniTableExtensionInitPtr(pub MiniTableExtensionPtr);
unsafe impl Send for MiniTableExtensionInitPtr {}
unsafe impl Sync for MiniTableExtensionInitPtr {}
#[derive(Clone, Copy)]
pub struct ExtensionRegistryInitPtr(pub ExtensionRegistryPtr);
unsafe impl Send for ExtensionRegistryInitPtr {}
unsafe impl Sync for ExtensionRegistryInitPtr {}
pub enum ExtensionSub {
None,
Message(MiniTablePtr),
Enum(MiniTableEnumPtr),
}
pub unsafe fn build_mini_table(mini_descriptor: &'static str) -> MiniTablePtr {
unsafe {
MiniTablePtr::new(upb_MiniTable_Build(
mini_descriptor.as_ptr(),
mini_descriptor.len(),
THREAD_LOCAL_ARENA.with(|a| a.raw()),
std::ptr::null_mut(),
))
}
}
pub unsafe fn build_enum_mini_table(mini_descriptor: &'static str) -> MiniTableEnumPtr {
unsafe {
MiniTableEnumPtr::new(upb_MiniTableEnum_Build(
mini_descriptor.as_ptr(),
mini_descriptor.len(),
THREAD_LOCAL_ARENA.with(|a| a.raw()),
std::ptr::null_mut(),
))
}
}
pub unsafe fn build_extension_mini_table(
mini_descriptor: &'static str,
extendee: MiniTablePtr,
sub: ExtensionSub,
) -> MiniTableExtensionPtr {
unsafe {
let ext = NonNull::new_unchecked(upb_MiniTableExtension_Build(
mini_descriptor.as_ptr(),
mini_descriptor.len(),
extendee,
THREAD_LOCAL_ARENA.with(|a| a.raw()),
std::ptr::null_mut(),
));
match sub {
ExtensionSub::None => {}
ExtensionSub::Message(m) => {
assert!(upb_MiniTableExtension_SetSubMessage(ext, m));
}
ExtensionSub::Enum(m) => {
assert!(upb_MiniTableExtension_SetSubEnum(ext, m));
}
}
ext
}
}
pub unsafe fn link_mini_table(
mini_table: MiniTablePtr,
submessages: &[MiniTablePtr],
subenums: &[MiniTableEnumPtr],
) {
unsafe {
assert!(upb_MiniTable_Link(
mini_table,
submessages.as_ptr(),
submessages.len(),
subenums.as_ptr(),
subenums.len()
));
}
}