Skip to main content

monocoque_core/
lib.rs

1//! Monocoque Core
2//!
3//! This crate contains the runtime-agnostic core building blocks:
4//! - Pinned / io_uring-safe allocation (`alloc`)
5//! - Zero-copy segmented buffer (`buffer`)
6//! - TCP utilities for high-performance networking (`tcp`)
7//! - ROUTER hub + peer map (`router`)
8//! - PUB/SUB core (subscription index + hub) (`pubsub`)
9//! - Byte-based backpressure (`backpressure`)
10//! - Error types (`error`)
11
12// The tcp module needs raw fd/socket access for socket configuration
13#![cfg_attr(not(test), deny(unsafe_code))]
14// Allow future features for serialization support
15#![allow(unexpected_cfgs)]
16// Allow some pedantic lints that are intentional in this crate
17#![allow(clippy::cast_possible_truncation)]
18#![allow(clippy::cast_sign_loss)]
19#![allow(clippy::items_after_statements)]
20#![allow(clippy::module_name_repetitions)]
21#![allow(clippy::needless_pass_by_value)]
22#![allow(clippy::needless_pass_by_ref_mut)]
23// Pedantic lints that add noise without value
24#![allow(clippy::return_self_not_must_use)] // Builder patterns are self-documenting
25#![allow(clippy::missing_errors_doc)] // Error types are self-explanatory
26#![allow(clippy::missing_panics_doc)] // Most panics are in unreachable paths
27#![allow(clippy::missing_const_for_fn)] // Const fn is not always beneficial
28#![allow(clippy::future_not_send)] // Runtime design: futures are not required to be Send
29#![allow(clippy::multiple_crate_versions)] // Transitive dependencies, will resolve later
30#![allow(clippy::struct_excessive_bools)] // Options struct legitimately needs multiple bools
31#![allow(clippy::question_mark)] // Some code patterns are more explicit without ?
32#![allow(clippy::needless_continue)] // Continue statements can improve readability
33#![allow(clippy::manual_let_else)] // Match expressions can be clearer in some contexts
34#![allow(clippy::match_same_arms)]
35pub mod alloc;
36pub mod backpressure;
37pub mod buffer;
38pub mod config;
39pub mod endpoint;
40pub mod error;
41pub mod inproc;
42pub mod message;
43pub mod message_builder;
44pub mod monitor;
45pub mod options;
46pub mod poison;
47pub mod reconnect;
48pub mod router;
49pub mod socket_type;
50pub mod subscription;
51pub mod tcp;
52pub mod timeout;
53
54#[cfg(unix)]
55pub mod ipc;
56
57pub mod pubsub {
58    pub mod hub;
59    pub mod index;
60}
61
62// Optional: a small prelude to make downstream crates ergonomic.
63// Keep it minimal to avoid API lock-in.
64pub mod prelude {
65    pub use crate::alloc::{IoArena, SlabMut};
66    pub use crate::backpressure::{BytePermits, NoOpPermits, Permit, SemaphorePermits};
67    pub use crate::buffer::SegmentedBuffer;
68    pub use crate::endpoint::Endpoint;
69    pub use crate::message_builder::Message;
70    pub use crate::monitor::{SocketEvent, SocketMonitor};
71    pub use crate::options::SocketOptions;
72    pub use crate::poison::PoisonGuard;
73    pub use crate::pubsub::hub::{PubSubCmd, PubSubEvent, PubSubHub};
74    pub use crate::pubsub::index::{PeerKey, SubscriptionIndex};
75    pub use crate::reconnect::{ReconnectError, ReconnectState};
76    pub use crate::router::{HubEvent, PeerCmd, RouterBehavior, RouterCmd, RouterHub};
77    pub use crate::socket_type::SocketType;
78    pub use crate::tcp::{configure_tcp_keepalive, enable_tcp_nodelay};
79
80    #[cfg(unix)]
81    pub use crate::ipc;
82}