pub struct NetTransportBuilder<N, T, TP>where
N: NetworkProvider + Clone + 'static,
T: TimeProvider + Clone + 'static,
TP: TaskProvider + Clone + 'static,{ /* private fields */ }Expand description
Builder for NetTransport that eliminates common footguns.
The manual Rc wrapping and set_weak_self() pattern is error-prone:
forgetting set_weak_self() causes a runtime panic. This builder handles
both automatically.
§Examples
// Standard usage - server or client that needs RPC responses:
let transport = NetTransportBuilder::new(network, time, task)
.local_address(addr)
.build_listening()
.await?;
// Fire-and-forget sender (no listening needed):
let transport = NetTransportBuilder::new(network, time, task)
.local_address(addr)
.build();
// With custom peer config:
let transport = NetTransportBuilder::new(network, time, task)
.local_address(addr)
.peer_config(config)
.build_listening()
.await?;§Why Build vs Build Listening?
-
build_listening(): For most RPC use cases. Both servers AND clients need this because responses are sent to the client’s listening address. -
build(): For fire-and-forget messaging where you don’t expect responses. Also useful for testing where you control message flow manually.
Implementations§
Source§impl<N, T, TP> NetTransportBuilder<N, T, TP>where
N: NetworkProvider + Clone + 'static,
T: TimeProvider + Clone + 'static,
TP: TaskProvider + Clone + 'static,
impl<N, T, TP> NetTransportBuilder<N, T, TP>where
N: NetworkProvider + Clone + 'static,
T: TimeProvider + Clone + 'static,
TP: TaskProvider + Clone + 'static,
Sourcepub fn new(
network: N,
time: T,
task_provider: TP,
) -> NetTransportBuilder<N, T, TP>
pub fn new( network: N, time: T, task_provider: TP, ) -> NetTransportBuilder<N, T, TP>
Create a new builder with the required providers.
§Arguments
network- Network provider for TCP connectionstime- Time provider for timing operationstask_provider- Task provider for spawning background tasks
Sourcepub fn local_address(
self,
address: NetworkAddress,
) -> NetTransportBuilder<N, T, TP>
pub fn local_address( self, address: NetworkAddress, ) -> NetTransportBuilder<N, T, TP>
Set the local address for this transport.
This is required before calling build() or build_listening().
§Arguments
address- The network address to bind to
Sourcepub fn peer_config(self, config: PeerConfig) -> NetTransportBuilder<N, T, TP>
pub fn peer_config(self, config: PeerConfig) -> NetTransportBuilder<N, T, TP>
Set custom peer configuration.
If not set, uses PeerConfig::default().
Sourcepub fn build(self) -> Rc<NetTransport<N, T, TP>>
pub fn build(self) -> Rc<NetTransport<N, T, TP>>
Build the transport without starting the listener.
Returns Rc<NetTransport> with set_weak_self() already called.
Use this for fire-and-forget messaging or testing.
For RPC (request/response), use build_listening() instead.
§Panics
Panics if local_address() was not called.
Sourcepub async fn build_listening(
self,
) -> Result<Rc<NetTransport<N, T, TP>>, MessagingError>
pub async fn build_listening( self, ) -> Result<Rc<NetTransport<N, T, TP>>, MessagingError>
Build the transport and start listening for incoming connections.
Returns Rc<NetTransport> with set_weak_self() already called
and the listener started.
Use this for typical RPC usage where you need to receive responses. Both servers AND clients need this in a request/response pattern.
§Errors
Returns an error if binding to the local address fails.
§Panics
Panics if local_address() was not called.