1#[macro_export]
28macro_rules! marker {
29 ($name:ident, $docs:literal) => {
30 #[doc = $docs]
31 #[derive(Clone, Copy, Debug, derive_more::Display, PartialEq, Eq)]
32 pub struct $name;
33 };
34}
35
36#[cfg(test)]
37mod tests {
38 marker!(A, "a type");
40
41 #[test]
42 fn marker_is_equals() {
43 assert_eq!(A, A);
44 }
45
46 #[test]
47 fn marker_is_clone() {
48 let a1 = A;
49 #[allow(clippy::clone_on_copy)]
50 let a2 = a1.clone();
51 assert_eq!(a1, a2);
52 }
53
54 #[test]
55 fn marker_is_copy() {
56 let a1 = A;
57 let a2 = a1;
58 fn consume(_a: A) {}
59 consume(a1);
60 assert_eq!(a2, a1);
61 }
62
63 #[test]
64 fn marker_is_debug() {
65 assert_eq!(format!("{:?}", A), "A");
66 }
67
68 #[test]
69 fn marker_is_display() {
70 assert_eq!(format!("{}", A), "A");
71 }
72}