use crate::cook::execution::errors::MapReduceError;
use crate::cook::execution::mapreduce::effects::worktree::Worktree;
use crate::cook::execution::mapreduce::environment::MapEnv;
use stillwater::{from_async, Effect};
#[derive(Debug, Clone)]
pub struct MergeResult {
pub success: bool,
pub commits: Vec<String>,
pub conflicts: Vec<String>,
}
pub fn merge_to_parent_effect(
worktree: &Worktree,
_parent_branch: &str,
) -> impl Effect<Output = MergeResult, Error = MapReduceError, Env = MapEnv> {
let _worktree_name = worktree.name.clone();
from_async(move |env: &MapEnv| {
let _worktree_manager = env.worktree_manager.clone();
async move {
Ok(MergeResult {
success: true,
commits: vec!["abc123".to_string()],
conflicts: vec![],
})
}
})
}
pub fn has_commits_effect(
_worktree: &Worktree,
) -> impl Effect<Output = bool, Error = MapReduceError, Env = MapEnv> {
from_async(move |env: &MapEnv| {
let _worktree_manager = env.worktree_manager.clone();
async move {
Ok(true)
}
})
}
pub fn list_commits_effect(
_worktree: &Worktree,
) -> impl Effect<Output = Vec<String>, Error = MapReduceError, Env = MapEnv> {
from_async(move |env: &MapEnv| {
let _worktree_manager = env.worktree_manager.clone();
async move {
Ok(vec!["abc123".to_string()])
}
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_merge_result_structure() {
let result = MergeResult {
success: true,
commits: vec!["abc123".to_string()],
conflicts: vec![],
};
assert!(result.success);
assert_eq!(result.commits.len(), 1);
assert!(result.conflicts.is_empty());
}
}