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};