gitignore_template_generator/validator/
impls.rs

1use super::api::CliArgsValidator;
2use crate::constant;
3
4/// Default implementation of cli args validator.
5///
6/// Can be used directly as part of [`clap::Arg::value_parser`].
7pub struct DefaultCliArgsValidator;
8
9impl CliArgsValidator for DefaultCliArgsValidator {
10    /// Checks if given value contains commas.
11    ///
12    /// Returns [`constant::error_messages::COMMAS_NOT_ALLOWED`] if any commas
13    /// found.
14    ///
15    /// See [`CliArgsValidator::has_no_commas`] for more infos.
16    fn has_no_commas(value: &str) -> Result<String, String> {
17        if value.contains(',') {
18            Err(String::from(constant::error_messages::COMMAS_NOT_ALLOWED))
19        } else {
20            Ok(value.to_string())
21        }
22    }
23
24    /// Checks if given value contains whitespaces.
25    ///
26    /// Returns [`constant::error_messages::WHITESPACES_NOT_ALLOWED`] if any
27    /// whitespaces found.
28    ///
29    /// See [`CliArgsValidator::has_no_whitespaces`] for more infos.
30    fn has_no_whitespaces(value: &str) -> Result<String, String> {
31        if value.chars().any(|c| c.is_whitespace()) {
32            Err(String::from(
33                constant::error_messages::WHITESPACES_NOT_ALLOWED,
34            ))
35        } else {
36            Ok(value.to_string())
37        }
38    }
39
40    fn has_valid_template_name(value: &str) -> Result<String, String> {
41        match Self::has_no_commas(value) {
42            Ok(no_commas_value) => {
43                match Self::has_no_whitespaces(&no_commas_value) {
44                    Ok(clean_value) => Ok(clean_value),
45                    Err(whitespaces_error) => Err(whitespaces_error),
46                }
47            }
48            Err(commas_error) => match Self::has_no_whitespaces(value) {
49                Ok(_) => Err(commas_error),
50                Err(whitespaces_error) => {
51                    Err(format!("{} + {}", commas_error, whitespaces_error))
52                }
53            },
54        }
55    }
56}