# shellcheck shell=sh disable=SC3043
xrc:mod:lib     job     failfast/init failfast/fini failfast/other

___x_cmd_job_failfast(){
    local op="${1}"; shift
    case "$op" in
        init)                   ___x_cmd_job_failfast_init "$@"     ;;
        fini)                   ___x_cmd_job_failfast_fini "$@"     ;;

        put)                    ___x_cmd_job_failfast_put "$@"      ;;

        max)                    ___x_cmd_job_failfast_max           ;;
        active)                 ___x_cmd_job_failfast_active "$@"   ;;

        foreach)                ___x_cmd_job_failfast_foreach "$@" ;;

        --)                     ___x_cmd_job_failfast_run -- "$@" ;;
        *)                      ___x_cmd_job_failfast_run "$op" "$@" ;;
    esac
}

# ___x_cmd_job_failfast_run(){
#     (
#         ___x_cmd_job_failfast_init 10
#         "$@"
#     ) | (
#         ___x_cmd_job_failfast_fini
#     )
# }


___x_cmd_job_failfast_foreach(){
    local ___X_CMD_JOB_FAILFAST_EVAL_MAX=10
    while true; do
        case "$1" in
            -m|--max)   ___X_CMD_JOB_FAILFAST_EVAL_MAX=$2; shift 2; continue ;;
            *)          break
        esac
    done

    (
        ___x_cmd_job_failfast_init "$___X_CMD_JOB_FAILFAST_EVAL_MAX"
        local each; while read -r each; do
            x job failfast put "$@"
        done
    ) | (
        ___x_cmd_job_failfast_fini
    )
}



# (
#     function www(){
#         job:warn start
#         sleep 3
#         job:info end
#     }

#     ___x_cmd_job_failfast_init 7

#     for i in 1 2 3 4 5 6; do
#         ___x_cmd_job_failfast_put      www || break # or return 130
#     done

#     for i in $(seq 7); do
#         ___x_cmd_job_failfast_put      sleep 3 || break # or return 130
#     done
# ) | (___x_cmd_job_failfast_fini)




# (
#     ___x_cmd_job_failfast_init 7
#     for i in 1 2 3 4 5 6; do
#         ___x_cmd_job_failfast_put      sleep 3 || break # or return 130
#     done

#     ___x_cmd_job_failfast_put   eval 'sleep 3 && false' || break

#     for i in $(seq 7); do
#         ___x_cmd_job_failfast_put      sleep 3 || break # or return 130
#     done


# ) | (___x_cmd_job_failfast_fini)

# eval "$(

# (
#     ___x_cmd_job_failfast_init 7
#     for i in 1 2 3 4 5 6; do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done

#     ___x_cmd_job_failfast_put   eval 'sleep 3 && false' || return 130

#     for i in $(seq 7); do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done


# ) | ___x_cmd_job_failfast_fini

# )"


# x job failsafe run eval '
#     ___x_cmd_job_failfast_init 7
#     for i in 1 2 3 4 5 6; do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done

#     ___x_cmd_job_failfast_put   eval '\''sleep 3 && false'\'' || return 130

#     for i in $(seq 7); do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done
# '


# fff(){
#     ___x_cmd_job_failfast_init 7
#     for i in 1 2 3 4 5 6; do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done

#     ___x_cmd_job_failfast_put   eval 'sleep 3 && false' || return 130

#     for i in $(seq 7); do
#         ___x_cmd_job_failfast_put      sleep 3 || return 130 # or return 130
#     done
# }


# x job failsafe run fff

