Skip to main content

soroban_cli/commands/contract/deploy/
utils.rs

1use regex::Regex;
2
3#[derive(thiserror::Error, Debug)]
4pub enum Error {
5    #[error("alias must have only letters, numbers, underscores and dashes")]
6    InvalidAliasFormat { alias: String },
7}
8
9pub fn alias_validator(alias: &str) -> Result<String, Error> {
10    let regex = Regex::new(r"^[a-zA-Z0-9_-]+$").unwrap();
11
12    if regex.is_match(alias) {
13        Ok(alias.into())
14    } else {
15        Err(Error::InvalidAliasFormat {
16            alias: alias.into(),
17        })
18    }
19}
20
21#[cfg(test)]
22mod tests {
23    use super::*;
24
25    #[test]
26    fn test_alias_validator_with_valid_inputs() {
27        let valid_inputs = [
28            "hello",
29            "123",
30            "hello123",
31            "hello_123",
32            "123_hello",
33            "123-hello",
34            "hello-123",
35            "HeLlo-123",
36        ];
37
38        for input in valid_inputs {
39            let result = alias_validator(input);
40            assert!(result.is_ok());
41            assert!(result.unwrap() == input);
42        }
43    }
44
45    #[test]
46    fn test_alias_validator_with_invalid_inputs() {
47        let invalid_inputs = ["", "invalid!", "oh no"];
48
49        for input in invalid_inputs {
50            let result = alias_validator(input);
51            assert!(result.is_err());
52        }
53    }
54}