#![forbid(unsafe_code)]
#![deny(missing_docs)]
pub mod channel;
pub mod codec;
pub mod error;
pub mod handler;
pub mod queue;
pub mod ringbuf;
pub mod router;
pub use channel::ChannelBuffer;
pub use codec::{
Bytes, DRAIN_FRAME_OVERHEAD, Decode, Encode, FRAME_HEADER_SIZE, FrameHeader, MsgType,
PROTOCOL_VERSION, frame_pack, frame_unpack,
};
pub use error::Error;
pub use handler::{ConduitHandler, HandlerContext, HandlerResponse};
pub use queue::Queue;
pub use ringbuf::{PushOutcome, RingBuffer};
pub use router::Router;
#[inline]
pub fn lock_or_recover<T>(mutex: &std::sync::Mutex<T>) -> std::sync::MutexGuard<'_, T> {
mutex.lock().unwrap_or_else(|e| e.into_inner())
}
#[inline]
pub fn write_or_recover<T>(lock: &std::sync::RwLock<T>) -> std::sync::RwLockWriteGuard<'_, T> {
lock.write().unwrap_or_else(|e| e.into_inner())
}
#[inline]
pub fn read_or_recover<T>(lock: &std::sync::RwLock<T>) -> std::sync::RwLockReadGuard<'_, T> {
lock.read().unwrap_or_else(|e| e.into_inner())
}
#[doc(hidden)]
pub use serde;
#[doc(hidden)]
pub use sonic_rs;