proxima-primitives 0.1.0

The pipe algebra itself: the Pipe trait — an async In -> Result<Out, Err> that becomes a transform, source, sink or observe by choice of types — plus its three tier siblings (SendPipe, UnpinPipe, UnpinSendPipe), Handler, SourcePipe, the payload types Carry, ResponseStream and RequestStream (buffered bodies are plain Bytes), HeaderList, the sans-IO byte-stream traits, runtime-agnostic concurrency primitives, and the Replay/GenericStream transport seam. Everything else in proxima composes what is defined here.
Documentation
//! `proxima_primitives::sync::blocking` — canonical tier-resolved BLOCKING mutex.
//!
//! Folded from the former `proxima-lock` crate (Workstream F, RISC-dedup:
//! `proxima-lock` had zero workspace consumers — an adoption gap, not dead
//! code). One `Mutex<T>` API, backend chosen by tier:
//!
//! - **std** (default): re-exports `parking_lot::{Mutex, MutexGuard}`
//!   unchanged — a genuine passthrough, no behavior change for std
//!   consumers.
//! - **`no_std` + `blocking`**: `lock_api::Mutex` over a futex raw mutex
//!   (`futex::RawFutexMutex`) backed by `atomic-wait` (Linux `futex`,
//!   macOS `__ulock`, Windows `WaitOnAddress`).
//!
//! There is deliberately no spin fallback: a blocking lock needs an OS wait
//! primitive, so `no_std` with neither `std` nor `blocking` exposes no
//! `Mutex` at all rather than silently degrading to a spinlock.
//!
//! This module's `Mutex` PARKS a real OS thread — the lock-of-last-resort
//! outside async contexts per the workspace hot-path discipline. It is
//! deliberately namespaced away from [`crate::sync::Mutex`] (the crate-root
//! ASYNC mutex, `futures::lock::Mutex`-backed, which yields the task
//! instead of parking a thread) so the two never collide under one name.

// `Condvar` rides with the std backend only: the futex tier has no wait-queue to
// hang one on, so a no_std blocking worker waits on an async gate instead.
#[cfg(feature = "std")]
pub use parking_lot::{Condvar, Mutex, MutexGuard};

#[cfg(all(not(feature = "std"), feature = "blocking"))]
mod futex;
#[cfg(all(not(feature = "std"), feature = "blocking"))]
pub use futex::{Mutex, MutexGuard, RawFutexMutex};