mod bare_conduit;
pub use bare_conduit::*;
mod into_conduit;
pub use into_conduit::*;
#[cfg(not(target_arch = "wasm32"))]
mod stable_conduit;
#[cfg(not(target_arch = "wasm32"))]
pub use stable_conduit::*;
#[cfg(not(target_arch = "wasm32"))]
mod memory_link;
#[cfg(not(target_arch = "wasm32"))]
pub use memory_link::*;
mod session;
pub use session::*;
#[cfg(not(target_arch = "wasm32"))]
mod driver;
#[cfg(not(target_arch = "wasm32"))]
pub use driver::*;
#[cfg(target_arch = "wasm32")]
mod wasm_driver;
#[cfg(target_arch = "wasm32")]
pub use wasm_driver::*;
use facet_format::{FormatDeserializer, MetaSource};
use facet_postcard::PostcardParser;
use facet_reflect::Partial;
use roam_types::{Backing, SelfRef};
pub fn rpc_plan<T: facet::Facet<'static>>() -> &'static roam_types::RpcPlan {
roam_types::RpcPlan::for_type::<T>()
}
pub(crate) fn deserialize_postcard<T: facet::Facet<'static>>(
backing: Backing,
) -> Result<SelfRef<T>, facet_format::DeserializeError> {
SelfRef::try_new(backing, |bytes| {
let mut value = std::mem::MaybeUninit::<T>::uninit();
let ptr = facet_core::PtrUninit::from_maybe_uninit(&mut value);
#[allow(unsafe_code)]
let partial: Partial<'_, true> = unsafe { Partial::from_raw_with_shape(ptr, T::SHAPE) }
.map_err(facet_format::DeserializeError::from)?;
let mut parser = PostcardParser::new(bytes);
let mut deserializer = FormatDeserializer::new(&mut parser);
let partial = deserializer.deserialize_into(partial, MetaSource::FromEvents)?;
partial
.finish_in_place()
.map_err(facet_format::DeserializeError::from)?;
#[allow(unsafe_code)]
Ok(unsafe { value.assume_init() })
})
}
#[cfg(test)]
mod tests;