frep_core/
run.rs

1use anyhow::bail;
2
3use crate::{
4    search::FileSearcher,
5    validation::{
6        SearchConfiguration, SimpleErrorHandler, ValidationResult, validate_search_configuration,
7    },
8};
9
10pub fn find_and_replace(search_config: SearchConfiguration<'_>) -> anyhow::Result<String> {
11    let mut error_handler = SimpleErrorHandler::new();
12    let search_config = validate_search_configuration(search_config, &mut error_handler)?;
13    let searcher = match search_config {
14        ValidationResult::Success(search_config) => FileSearcher::new(search_config),
15        ValidationResult::ValidationErrors => {
16            bail!("{}", error_handler.errors_str().unwrap());
17        }
18    };
19
20    let num_files_replaced = searcher.walk_files_and_replace(None);
21
22    Ok(format!(
23        "Success: {num_files_replaced} file{prefix} updated",
24        prefix = if num_files_replaced != 1 { "s" } else { "" },
25    ))
26}