Skip to main content

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;