moonpool-transport 0.8.0

FDB-style transport layer for the moonpool framework
Documentation
//! # Moonpool Transport Layer
//!
//! FDB-style transport layer for the moonpool simulation framework.
//!
//! This crate provides networking primitives that work identically in
//! simulation and production environments, following `FoundationDB`'s
//! `NetTransport` patterns.
//!
//! ## Architecture
//!
//! ```text
//! ┌─────────────────────────────────────────────────┐
//! │              Application Code                    │
//! │         Uses NetTransport + RPC                 │
//! ├─────────────────────────────────────────────────┤
//! │     NetTransport (endpoint routing)            │
//! │     • Multiplexes connections per endpoint      │
//! │     • Request/response with correlation         │
//! ├─────────────────────────────────────────────────┤
//! │     Peer (connection management)                │
//! │     • Automatic reconnection with backoff       │
//! │     • Message queuing during disconnection      │
//! ├─────────────────────────────────────────────────┤
//! │     Wire Format (serialization)                 │
//! │     • Length-prefixed packets                   │
//! │     • CRC32C checksums                          │
//! └─────────────────────────────────────────────────┘
//! ```
//!
//! ## Components
//!
//! | Component | Purpose |
//! |-----------|---------|
//! | [`Peer`] | Resilient connection with automatic reconnection |
//! | [`NetTransport`] | Endpoint routing and connection multiplexing |
//! | [`wire`] | Binary serialization with CRC32C checksums |
//! | [`rpc`] | Request/response patterns with typed messaging |
//!
//! ## Quick Start
//!
//! ```ignore
//! use moonpool_transport::{NetTransportBuilder, send_request};
//!
//! // Build transport with network provider
//! let transport = NetTransportBuilder::new(network_provider, time_provider)
//!     .build();
//!
//! // Send typed request, get typed response
//! let response: PongMessage = send_request(&transport, endpoint, ping).await?;
//! ```

#![deny(missing_docs)]
#![deny(clippy::unwrap_used)]

// Re-export core types for convenience
pub use moonpool_core::{
    CodecError, Endpoint, JsonCodec, MessageCodec, NetworkAddress, NetworkAddressParseError,
    NetworkProvider, OpenOptions, Providers, RandomProvider, SimulationError, SimulationResult,
    StorageFile, StorageProvider, TaskProvider, TcpListenerTrait, TimeError, TimeProvider, UID,
    WELL_KNOWN_RESERVED_COUNT, WellKnownToken,
};
// Production provider bundle — only with the `tokio` feature (core/tokio-providers).
#[cfg(feature = "tokio")]
pub use moonpool_core::{
    TokioNetworkProvider, TokioProviders, TokioRandomProvider, TokioStorageFile,
    TokioStorageProvider, TokioTaskProvider, TokioTimeProvider,
};

// =============================================================================
// Modules
// =============================================================================

/// Error types for transport operations.
pub mod error;

/// Resilient peer connection management.
pub mod peer;

/// Wire format with CRC32C checksums.
pub mod wire;

/// RPC layer with typed request/response patterns.
pub mod rpc;

// =============================================================================
// Public API Re-exports
// =============================================================================

// Error exports
pub use error::MessagingError;

// Peer exports
pub use peer::{MonitorConfig, Peer, PeerConfig, PeerError, PeerMetrics, PeerReceiver};

// Wire format exports
pub use wire::{
    HEADER_SIZE, MAX_PAYLOAD_SIZE, PacketHeader, WireError, deserialize_packet, serialize_packet,
    try_deserialize_packet,
};

// RPC exports
pub use rpc::{
    DecodeFn, EncodeFn, EndpointMap, FailureMonitor, FailureStatus, InterfaceMethod,
    MessageReceiver, NetNotifiedQueue, NetTransport, NetTransportBuilder, ReplyError, ReplyFuture,
    ReplyPromise, RequestEnvelope, RequestStream, RpcError, ServerHandle, ServiceEndpoint,
    TransportHandle, get_reply, get_reply_unless_failed_for, make_decode_fn, make_encode_fn, send,
    send_request, try_get_reply,
};

// Production transport alias (TokioProviders + JsonCodec).
#[cfg(feature = "tokio")]
pub use rpc::TokioTransport;

// Attribute macros
pub use moonpool_transport_derive::service;