use std::{fmt::Debug, hash::Hash, marker::PhantomData};
use peace_resources::paths::{PeaceAppDir, PeaceDir, WorkspaceDir};
use peace_rt_model::{
params::{KeyKnown, KeyMaybe, ParamsKeys, ParamsKeysImpl, ParamsTypeRegs, WorkspaceParams},
Workspace,
};
use serde::{de::DeserializeOwned, Serialize};
#[derive(Debug)]
pub struct NoProfileNoFlow<'ctx, E, O, PKeys>
where
PKeys: ParamsKeys + 'static,
{
output: &'ctx mut O,
workspace: &'ctx Workspace,
params_type_regs: ParamsTypeRegs<PKeys>,
workspace_params: WorkspaceParams<<PKeys::WorkspaceParamsKMaybe as KeyMaybe>::Key>,
marker: PhantomData<E>,
}
impl<'ctx, E, O, PKeys> NoProfileNoFlow<'ctx, E, O, PKeys>
where
PKeys: ParamsKeys + 'static,
{
pub(crate) fn new(
output: &'ctx mut O,
workspace: &'ctx Workspace,
params_type_regs: ParamsTypeRegs<PKeys>,
workspace_params: WorkspaceParams<<PKeys::WorkspaceParamsKMaybe as KeyMaybe>::Key>,
) -> Self {
Self {
output,
workspace,
params_type_regs,
workspace_params,
marker: PhantomData,
}
}
pub fn output(&self) -> &O {
self.output
}
pub fn output_mut(&mut self) -> &mut O {
self.output
}
pub fn workspace(&self) -> &Workspace {
self.workspace
}
pub fn workspace_dir(&self) -> &WorkspaceDir {
self.workspace.dirs().workspace_dir()
}
pub fn peace_dir(&self) -> &PeaceDir {
self.workspace.dirs().peace_dir()
}
pub fn peace_app_dir(&self) -> &PeaceAppDir {
self.workspace.dirs().peace_app_dir()
}
pub fn params_type_regs(&self) -> &ParamsTypeRegs<PKeys> {
&self.params_type_regs
}
}
impl<'ctx, E, O, WorkspaceParamsK, ProfileParamsKMaybe, FlowParamsKMaybe>
NoProfileNoFlow<
'ctx,
E,
O,
ParamsKeysImpl<KeyKnown<WorkspaceParamsK>, ProfileParamsKMaybe, FlowParamsKMaybe>,
>
where
WorkspaceParamsK:
Clone + Debug + Eq + Hash + DeserializeOwned + Serialize + Send + Sync + 'static,
ProfileParamsKMaybe: KeyMaybe,
FlowParamsKMaybe: KeyMaybe,
{
pub fn workspace_params(&self) -> &WorkspaceParams<WorkspaceParamsK> {
&self.workspace_params
}
}