soroban_cli/commands/contract/deploy/
utils.rs

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