use std::net::IpAddr;
use moonpool_core::{TokioTaskProvider, impl_providers_bundle};
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 {
#[must_use]
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_bundle!(SimProviders {
network: SimNetworkProvider,
time: SimTimeProvider,
task: TokioTaskProvider,
random: SimRandomProvider,
storage: SimStorageProvider,
});