mod bare_conduit;
pub use bare_conduit::*;
mod handshake;
pub use handshake::*;
mod into_conduit;
pub use into_conduit::*;
mod transport_prologue;
pub use transport_prologue::*;
mod link_source;
pub use link_source::*;
#[cfg(not(target_arch = "wasm32"))]
mod memory_link;
#[cfg(not(target_arch = "wasm32"))]
pub use memory_link::*;
mod connection;
pub use connection::*;
mod driver;
pub use driver::*;
pub struct MessagePlan {
pub writer_schema: Vec<u8>,
}
impl MessagePlan {
pub fn from_handshake(result: &vox_types::HandshakeResult) -> Result<Self, String> {
let writer_schema = if result.peer_schema.is_empty() {
vox_phon::schema_bytes::<vox_types::Message<'static>>().map_err(|e| e.to_string())?
} else {
result.peer_schema.clone()
};
validate_message_writer_schema(&writer_schema)?;
Ok(MessagePlan { writer_schema })
}
}
pub(crate) fn validate_message_writer_schema(writer_schema: &[u8]) -> Result<(), String> {
let writer = vox_phon::parse_schema_bytes(writer_schema)
.map_err(|error| format!("peer Message schema is invalid: {error}"))?;
vox_phon::build_decode_program::<vox_types::Message<'static>>(&writer)
.map(|_| ())
.map_err(|error| format!("peer Message schema is incompatible: {error}"))
}
pub mod testing;
#[cfg(test)]
mod tests;