moonpool_transport/
lib.rs

1//! # Moonpool Transport Layer
2//!
3//! FDB-style transport layer for the moonpool simulation framework.
4//!
5//! This crate provides networking primitives that work identically in
6//! simulation and production environments, following FoundationDB's
7//! NetTransport patterns.
8//!
9//! ## Architecture
10//!
11//! ```text
12//! ┌─────────────────────────────────────────────────┐
13//! │              Application Code                    │
14//! │         Uses NetTransport + RPC                 │
15//! ├─────────────────────────────────────────────────┤
16//! │     NetTransport (endpoint routing)            │
17//! │     • Multiplexes connections per endpoint      │
18//! │     • Request/response with correlation         │
19//! ├─────────────────────────────────────────────────┤
20//! │     Peer (connection management)                │
21//! │     • Automatic reconnection with backoff       │
22//! │     • Message queuing during disconnection      │
23//! ├─────────────────────────────────────────────────┤
24//! │     Wire Format (serialization)                 │
25//! │     • Length-prefixed packets                   │
26//! │     • CRC32C checksums                          │
27//! └─────────────────────────────────────────────────┘
28//! ```
29//!
30//! ## Components
31//!
32//! | Component | Purpose |
33//! |-----------|---------|
34//! | [`Peer`] | Resilient connection with automatic reconnection |
35//! | [`NetTransport`] | Endpoint routing and connection multiplexing |
36//! | [`wire`] | Binary serialization with CRC32C checksums |
37//! | [`rpc`] | Request/response patterns with typed messaging |
38//!
39//! ## Quick Start
40//!
41//! ```ignore
42//! use moonpool_transport::{NetTransportBuilder, send_request};
43//!
44//! // Build transport with network provider
45//! let transport = NetTransportBuilder::new(network_provider, time_provider)
46//!     .build();
47//!
48//! // Send typed request, get typed response
49//! let response: PongMessage = send_request(&transport, endpoint, ping).await?;
50//! ```
51
52#![deny(missing_docs)]
53#![deny(clippy::unwrap_used)]
54
55// Re-export core types for convenience
56pub use moonpool_core::{
57    CodecError, Endpoint, JsonCodec, MessageCodec, NetworkAddress, NetworkAddressParseError,
58    NetworkProvider, RandomProvider, SimulationError, SimulationResult, TaskProvider,
59    TcpListenerTrait, TimeProvider, TokioNetworkProvider, TokioTaskProvider, TokioTimeProvider,
60    UID, WELL_KNOWN_RESERVED_COUNT, WellKnownToken,
61};
62
63// =============================================================================
64// Modules
65// =============================================================================
66
67/// Error types for transport operations.
68pub mod error;
69
70/// Resilient peer connection management.
71pub mod peer;
72
73/// FDB-compatible wire format with CRC32C checksums.
74pub mod wire;
75
76/// RPC layer with typed request/response patterns.
77pub mod rpc;
78
79// =============================================================================
80// Public API Re-exports
81// =============================================================================
82
83// Error exports
84pub use error::MessagingError;
85
86// Peer exports
87pub use peer::{Peer, PeerConfig, PeerError, PeerMetrics, PeerReceiver};
88
89// Wire format exports
90pub use wire::{
91    HEADER_SIZE, MAX_PAYLOAD_SIZE, PacketHeader, WireError, deserialize_packet, serialize_packet,
92    try_deserialize_packet,
93};
94
95// RPC exports
96pub use rpc::{
97    EndpointMap, MessageReceiver, NetNotifiedQueue, NetTransport, NetTransportBuilder, ReplyError,
98    ReplyFuture, ReplyPromise, RequestEnvelope, RequestStream, send_request,
99};