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}