tor_rtmock/
net_runtime.rs

1//! Declare MockNetRuntime.
2
3// TODO(nickm): This is mostly copy-paste from MockSleepRuntime.  If possible,
4// we should make it so that more code is more shared.
5
6use crate::util::impl_runtime_prelude::*;
7
8use crate::net::MockNetProvider;
9
10/// A wrapper Runtime that overrides the SleepProvider trait for the
11/// underlying runtime.
12#[derive(Clone, Debug, Deftly)]
13#[derive_deftly(SomeMockRuntime)]
14pub struct MockNetRuntime<R: Runtime> {
15    /// The underlying runtime. Most calls get delegated here.
16    #[deftly(mock(task, sleep))]
17    #[deftly(mock(toplevel_where = "R: ToplevelBlockOn"))]
18    runtime: R,
19    /// A MockNetProvider.  Network-related calls get delegated here.
20    #[deftly(mock(net))]
21    net: MockNetProvider,
22}
23
24impl<R: Runtime> MockNetRuntime<R> {
25    /// Create a new runtime that wraps `runtime`, but overrides
26    /// its view of the network with a [`MockNetProvider`], `net`.
27    pub fn new(runtime: R, net: MockNetProvider) -> Self {
28        MockNetRuntime { runtime, net }
29    }
30
31    /// Return a reference to the underlying runtime.
32    pub fn inner(&self) -> &R {
33        &self.runtime
34    }
35
36    /// Return a reference to the [`MockNetProvider`]
37    pub fn mock_net(&self) -> &MockNetProvider {
38        &self.net
39    }
40}