pub(crate) mod platform_env;
use crate::Env;
use crate::env::EnvImpl;
use platform_env::PlatformEnv;
pub trait Platform: Send + Sync {
type E: Env;
fn env(&self) -> &(impl Env + use<Self>);
fn env_mut(&mut self) -> PlatformEnv<'_, Self::E>;
#[cfg(feature = "fs")]
fn fs(&self) -> &(impl crate::Fs + use<Self>);
#[cfg(feature = "fs")]
fn fs_mut(&mut self) -> &mut (impl crate::Fs + use<Self>);
#[cfg(feature = "process")]
fn process(&self) -> &(impl crate::Process + use<Self>);
#[cfg(feature = "process")]
fn process_mut(&mut self) -> &mut (impl crate::Process + use<Self>);
#[cfg(feature = "request")]
fn request(&self) -> &(impl crate::Request + use<Self>);
#[cfg(feature = "request")]
fn request_mut(&mut self) -> &mut (impl crate::Request + use<Self>);
}
pub(crate) struct PlatformImpl {
pub(crate) env: EnvImpl,
#[cfg(feature = "fs")]
pub(crate) fs: crate::fs::FsImpl,
#[cfg(feature = "process")]
pub(crate) process: crate::process::ProcessImpl,
#[cfg(feature = "request")]
pub(crate) request: crate::request::RequestImpl,
}
impl Platform for PlatformImpl {
type E = EnvImpl;
fn env(&self) -> &(impl Env + use<>) {
&self.env
}
fn env_mut(&mut self) -> PlatformEnv<'_, Self::E> {
PlatformEnv {
env: &mut self.env,
#[cfg(feature = "fs")]
fs: &mut self.fs,
#[cfg(feature = "process")]
process: &mut self.process,
#[cfg(feature = "request")]
request: &mut self.request,
}
}
#[cfg(feature = "fs")]
fn fs(&self) -> &(impl crate::Fs + use<>) {
&self.fs
}
#[cfg(feature = "fs")]
fn fs_mut(&mut self) -> &mut (impl crate::Fs + use<>) {
&mut self.fs
}
#[cfg(feature = "process")]
fn process(&self) -> &(impl crate::Process + use<>) {
&self.process
}
#[cfg(feature = "process")]
fn process_mut(&mut self) -> &mut (impl crate::Process + use<>) {
&mut self.process
}
#[cfg(feature = "request")]
fn request(&self) -> &(impl crate::Request + use<>) {
&self.request
}
#[cfg(feature = "request")]
fn request_mut(&mut self) -> &mut (impl crate::Request + use<>) {
&mut self.request
}
}