use super::*;
use crate::core::workflow::sys_validation_workflow::validation_deps::SysValDeps;
use crate::core::workflow::sys_validation_workflow::SysValidationWorkspace;
use crate::core::workflow::sys_validation_workflow::{
get_representative_agent, sys_validation_workflow,
};
use holochain_keystore::MetaLairClient;
#[cfg_attr(feature = "instrument", tracing::instrument(skip_all))]
#[allow(clippy::too_many_arguments)]
pub fn spawn_sys_validation_consumer(
workspace: SysValidationWorkspace,
space: Space,
conductor: ConductorHandle,
trigger_app_validation: TriggerSender,
trigger_integration: TriggerSender,
trigger_publish: TriggerSender,
network: DynHolochainP2pDna,
keystore: MetaLairClient,
) -> TriggerSender {
let (tx, rx) = TriggerSender::new();
let trigger_self = tx.clone();
let workspace = Arc::new(workspace);
let space = Arc::new(space);
let current_validation_dependencies = SysValDeps::default();
super::queue_consumer_dna_bound(
"sys_validation_consumer",
space.dna_hash.clone(),
conductor.task_manager(),
(tx.clone(), rx),
move || {
if let Some(representative_agent) =
get_representative_agent(&conductor, &network.dna_hash())
{
Either::Left(sys_validation_workflow(
workspace.clone(),
current_validation_dependencies.clone(),
trigger_app_validation.clone(),
trigger_integration.clone(),
trigger_publish.clone(),
trigger_self.clone(),
network.clone(),
keystore.clone(),
representative_agent,
))
} else {
tracing::warn!("No representative agent found for DNA, skipping sys validation.");
Either::Right(async move { Ok(WorkComplete::Complete) })
}
},
);
tx
}