use std::path::Path;
use crate::containment::PathGuard;
use crate::ops::apply_fragment::{FragmentPlacement, plan_apply_fragment_to_replace};
use super::{ApplyMode, EditResult};
#[cfg(any(feature = "cli", feature = "files"))]
pub fn apply_fragment_to_file(
path: &Path,
fragment: &str,
placement: FragmentPlacement,
unique: bool,
mode: ApplyMode,
guard: Option<&PathGuard>,
) -> anyhow::Result<EditResult> {
let (after, before, old) = match &placement {
FragmentPlacement::After(a) => (Some(a.as_str()), None, None),
FragmentPlacement::Before(b) => (None, Some(b.as_str()), None),
FragmentPlacement::Replace(o) => (None, None, Some(o.as_str())),
};
let path_str = path.to_string_lossy();
let op = plan_apply_fragment_to_replace(
path_str.as_ref(),
fragment,
None,
after,
before,
old,
unique,
)?;
let cwd = path.parent().unwrap_or_else(|| Path::new("."));
super::execute_as_edit_result(op, mode, cwd, guard, "apply.fragment", None)
}