use crate::cook::execution::errors::MapReduceError;
use crate::cook::execution::mapreduce::effects::worktree::Worktree;
use crate::cook::execution::mapreduce::environment::MapEnv;
use serde_json::Value;
use std::collections::HashMap;
use stillwater::{from_async, Effect};
#[derive(Debug, Clone)]
pub struct CommandResult {
pub worktree: Worktree,
pub variables: HashMap<String, Value>,
pub output: Vec<String>,
pub success: bool,
}
pub fn execute_commands_effect(
item: &Value,
worktree: &Worktree,
) -> impl Effect<Output = CommandResult, Error = MapReduceError, Env = MapEnv> {
let item = item.clone();
let worktree = worktree.clone();
from_async(move |env: &MapEnv| {
let item = item.clone();
let worktree = worktree.clone();
let _command_executor = env.command_executor.clone();
let _agent_template = env.agent_template.clone();
async move {
let mut variables = HashMap::new();
variables.insert("item".to_string(), item.clone());
Ok(CommandResult {
worktree,
variables,
output: vec!["Command executed".to_string()],
success: true,
})
}
})
}
#[cfg(test)]
mod tests {
use super::*;
use std::path::PathBuf;
#[test]
fn test_command_result_structure() {
let worktree = Worktree {
name: "test".to_string(),
path: PathBuf::from("/tmp/test"),
branch: "test-branch".to_string(),
};
let result = CommandResult {
worktree,
variables: HashMap::new(),
output: vec!["output".to_string()],
success: true,
};
assert_eq!(result.output.len(), 1);
assert_eq!(result.output[0], "output");
assert!(result.success);
}
}