ephemeris_forge/access/
name.rs1crate::non_empty_name! {
2 pub struct TeamName;
4 pub error EmptyTeamName("team name cannot be empty");
6}
7
8crate::non_empty_name! {
9 pub struct UserName;
11 pub error EmptyUserName("user name cannot be empty");
13 normalize = |value: String| value.to_lowercase();
14}
15
16#[cfg(test)]
17mod tests {
18 use std::collections::BTreeMap;
19
20 use super::{TeamName, UserName};
21
22 #[test]
23 fn user_names_compare_in_lowercase() {
24 let name = UserName::try_from("Octo-Cat".to_owned()).expect("valid");
25 assert_eq!(name.as_str(), "octo-cat");
26 UserName::try_from(String::new()).expect_err("empty");
27 }
28
29 #[test]
30 fn an_empty_name_is_rejected() {
31 TeamName::try_from(String::new()).expect_err("empty");
32 }
33
34 #[test]
35 fn names_decode_as_map_keys_and_empty_keys_fail() {
36 let teams: BTreeMap<TeamName, bool> =
37 facet_json::from_str(r#"{"maintainers":true}"#).expect("decodes");
38 assert_eq!(teams.len(), 1);
39 facet_json::from_str::<BTreeMap<TeamName, bool>>(r#"{"":true}"#).expect_err("empty key");
40 }
41}