use std::net::IpAddr;
use moonpool_core::{Providers, TokioTaskProvider};
use crate::network::SimNetworkProvider;
use crate::sim::WeakSimWorld;
use crate::storage::SimStorageProvider;
use super::{SimRandomProvider, SimTimeProvider};
#[derive(Clone)]
pub struct SimProviders {
network: SimNetworkProvider,
time: SimTimeProvider,
task: TokioTaskProvider,
random: SimRandomProvider,
storage: SimStorageProvider,
}
impl SimProviders {
pub fn new(sim: WeakSimWorld, seed: u64, ip: IpAddr) -> Self {
Self {
network: SimNetworkProvider::new(sim.clone()),
time: SimTimeProvider::new(sim.clone()),
task: TokioTaskProvider,
random: SimRandomProvider::new(seed),
storage: SimStorageProvider::new(sim, ip),
}
}
}
impl Providers for SimProviders {
type Network = SimNetworkProvider;
type Time = SimTimeProvider;
type Task = TokioTaskProvider;
type Random = SimRandomProvider;
fn network(&self) -> &Self::Network {
&self.network
}
fn time(&self) -> &Self::Time {
&self.time
}
fn task(&self) -> &Self::Task {
&self.task
}
fn random(&self) -> &Self::Random {
&self.random
}
type Storage = SimStorageProvider;
fn storage(&self) -> &Self::Storage {
&self.storage
}
}