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