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