soroban_cli/commands/contract/deploy/
utils.rs1use 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}