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, OpenOptions, Providers, RandomProvider, SimulationError, SimulationResult,
59 StorageFile, StorageProvider, TaskProvider, TcpListenerTrait, TimeError, TimeProvider, UID,
60 WELL_KNOWN_RESERVED_COUNT, WellKnownToken,
61};
62// Production provider bundle — only with the `tokio` feature (core/tokio-providers).
63#[cfg(feature = "tokio")]
64pub use moonpool_core::{
65 TokioNetworkProvider, TokioProviders, TokioRandomProvider, TokioStorageFile,
66 TokioStorageProvider, TokioTaskProvider, TokioTimeProvider,
67};
68
69// =============================================================================
70// Modules
71// =============================================================================
72
73/// Error types for transport operations.
74pub mod error;
75
76/// Resilient peer connection management.
77pub mod peer;
78
79/// Wire format with CRC32C checksums.
80pub mod wire;
81
82/// RPC layer with typed request/response patterns.
83pub mod rpc;
84
85// =============================================================================
86// Public API Re-exports
87// =============================================================================
88
89// Error exports
90pub use error::MessagingError;
91
92// Peer exports
93pub use peer::{MonitorConfig, Peer, PeerConfig, PeerError, PeerMetrics, PeerReceiver};
94
95// Wire format exports
96pub use wire::{
97 HEADER_SIZE, MAX_PAYLOAD_SIZE, PacketHeader, WireError, deserialize_packet, serialize_packet,
98 try_deserialize_packet,
99};
100
101// RPC exports
102pub use rpc::{
103 DecodeFn, EncodeFn, EndpointMap, FailureMonitor, FailureStatus, InterfaceMethod,
104 MessageReceiver, NetNotifiedQueue, NetTransport, NetTransportBuilder, ReplyError, ReplyFuture,
105 ReplyPromise, RequestEnvelope, RequestStream, RpcError, ServerHandle, ServiceEndpoint,
106 TransportHandle, get_reply, get_reply_unless_failed_for, make_decode_fn, make_encode_fn, send,
107 send_request, try_get_reply,
108};
109
110// Production transport alias (TokioProviders + JsonCodec).
111#[cfg(feature = "tokio")]
112pub use rpc::TokioTransport;
113
114// Attribute macros
115pub use moonpool_transport_derive::service;