stormchaser-engine 1.4.2

A robust, distributed workflow engine for event-driven and human-triggered workflows.
Documentation
use anyhow::Result;
use sqlx::PgPool;
use stormchaser_model::StepInstanceId;

use crate::handler::fetch_step_instance;
use crate::step_machine::{
    state::{Pending, Running},
    StepMachine,
};

pub(super) async fn fail_step_instance(
    step_instance_id: StepInstanceId,
    pool: &PgPool,
    error_message: String,
) -> Result<()> {
    let instance = fetch_step_instance(step_instance_id, pool).await?;
    let machine = StepMachine::<Pending>::from_instance(instance);
    let mut conn = pool.acquire().await?;
    let _machine = machine
        .start("error-recovery".to_string(), &mut *conn)
        .await?;

    let instance = fetch_step_instance(step_instance_id, pool).await?;
    let machine = StepMachine::<Running>::from_instance(instance);
    let _ = machine.fail(error_message, None, &mut *conn).await?;
    Ok(())
}