use peace_rt_model::Error;
use std::marker::PhantomData;
use peace_resources::{
resources::ts::{SetUp, WithStatesCurrentAndDesired},
Resources,
};
use peace_rt_model::cmd::CmdContext;
use crate::cmds::sub::{StatesCurrentDiscoverCmd, StatesDesiredDiscoverCmd};
#[derive(Debug)]
pub struct StatesDiscoverCmd<E, O>(PhantomData<(E, O)>);
impl<E, O> StatesDiscoverCmd<E, O>
where
E: std::error::Error + From<Error> + Send,
{
pub async fn exec(
cmd_context: CmdContext<'_, E, O, SetUp>,
) -> Result<CmdContext<'_, E, O, WithStatesCurrentAndDesired>, E> {
let CmdContext {
workspace,
item_spec_graph,
output,
mut resources,
states_type_regs,
#[cfg(feature = "output_progress")]
cmd_progress_tracker,
..
} = cmd_context;
let states_current =
StatesCurrentDiscoverCmd::<E, O>::exec_internal(item_spec_graph, &mut resources)
.await?;
let states_desired =
StatesDesiredDiscoverCmd::<E, O>::exec_internal(item_spec_graph, &mut resources)
.await?;
let resources = Resources::<WithStatesCurrentAndDesired>::from((
resources,
states_current,
states_desired,
));
let cmd_context = CmdContext::from((
workspace,
item_spec_graph,
output,
resources,
states_type_regs,
#[cfg(feature = "output_progress")]
cmd_progress_tracker,
));
Ok(cmd_context)
}
}
impl<E, O> Default for StatesDiscoverCmd<E, O> {
fn default() -> Self {
Self(PhantomData)
}
}