1use std::fmt::Display;
10use uuid::Uuid;
11
12#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
14pub struct GroupUuid(pub Uuid);
15
16impl GroupUuid {
17 pub fn new_random() -> GroupUuid {
19 GroupUuid(Uuid::new_v4())
20 }
21
22 pub fn nil() -> GroupUuid {
24 GroupUuid(Uuid::nil())
25 }
26}
27
28impl Default for GroupUuid {
29 fn default() -> GroupUuid {
30 GroupUuid::nil()
31 }
32}
33
34impl Display for GroupUuid {
35 fn fmt(&self, f: &mut ::std::fmt::Formatter) -> Result<(), ::std::fmt::Error> {
36 f.write_str(self.0.to_string().as_str())
37 }
38}
39
40#[cfg(test)]
41mod tests {
42
43 use super::*;
44 use uuid::Uuid;
45
46 #[test]
47 fn test_new_random_returns_random_group_uuids() {
48 let a = GroupUuid::new_random();
49 let b = GroupUuid::new_random();
50 assert!(a != b);
51 }
52
53 #[test]
54 fn test_nil_returns_nil_uuid() {
55 let expected = Uuid::nil();
56 let actual = GroupUuid::nil().0;
57 assert_eq!(actual, expected);
58 }
59
60 #[test]
61 fn test_default_returns_nil_group_uuid() {
62 let expected = GroupUuid::nil();
63 let actual = GroupUuid::default();
64 assert_eq!(actual, expected);
65 }
66}