entrenar/research/artifact/
role.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum ContributorRole {
8 Conceptualization,
10 DataCuration,
12 FormalAnalysis,
14 FundingAcquisition,
16 Investigation,
18 Methodology,
20 ProjectAdministration,
22 Resources,
24 Software,
26 Supervision,
28 Validation,
30 Visualization,
32 WritingOriginal,
34 WritingReview,
36}
37
38impl std::fmt::Display for ContributorRole {
39 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 match self {
41 Self::Conceptualization => write!(f, "Conceptualization"),
42 Self::DataCuration => write!(f, "Data curation"),
43 Self::FormalAnalysis => write!(f, "Formal analysis"),
44 Self::FundingAcquisition => write!(f, "Funding acquisition"),
45 Self::Investigation => write!(f, "Investigation"),
46 Self::Methodology => write!(f, "Methodology"),
47 Self::ProjectAdministration => write!(f, "Project administration"),
48 Self::Resources => write!(f, "Resources"),
49 Self::Software => write!(f, "Software"),
50 Self::Supervision => write!(f, "Supervision"),
51 Self::Validation => write!(f, "Validation"),
52 Self::Visualization => write!(f, "Visualization"),
53 Self::WritingOriginal => write!(f, "Writing – original draft"),
54 Self::WritingReview => write!(f, "Writing – review & editing"),
55 }
56 }
57}
58
59#[cfg(test)]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn test_contributor_role_display() {
65 assert_eq!(ContributorRole::Conceptualization.to_string(), "Conceptualization");
66 assert_eq!(ContributorRole::DataCuration.to_string(), "Data curation");
67 assert_eq!(ContributorRole::FormalAnalysis.to_string(), "Formal analysis");
68 assert_eq!(ContributorRole::FundingAcquisition.to_string(), "Funding acquisition");
69 assert_eq!(ContributorRole::Investigation.to_string(), "Investigation");
70 assert_eq!(ContributorRole::Methodology.to_string(), "Methodology");
71 assert_eq!(ContributorRole::ProjectAdministration.to_string(), "Project administration");
72 assert_eq!(ContributorRole::Resources.to_string(), "Resources");
73 assert_eq!(ContributorRole::Software.to_string(), "Software");
74 assert_eq!(ContributorRole::Supervision.to_string(), "Supervision");
75 assert_eq!(ContributorRole::Validation.to_string(), "Validation");
76 assert_eq!(ContributorRole::Visualization.to_string(), "Visualization");
77 assert_eq!(ContributorRole::WritingOriginal.to_string(), "Writing – original draft");
78 assert_eq!(ContributorRole::WritingReview.to_string(), "Writing – review & editing");
79 }
80
81 #[test]
82 fn test_contributor_role_clone() {
83 let role = ContributorRole::Software;
84 let cloned = role;
85 assert_eq!(role, cloned);
86 }
87
88 #[test]
89 fn test_contributor_role_debug() {
90 let role = ContributorRole::Software;
91 assert_eq!(format!("{role:?}"), "Software");
92 }
93
94 #[test]
95 fn test_contributor_role_eq() {
96 assert_eq!(ContributorRole::Software, ContributorRole::Software);
97 assert_ne!(ContributorRole::Software, ContributorRole::Validation);
98 }
99
100 #[test]
101 fn test_contributor_role_hash() {
102 use std::collections::HashSet;
103 let mut set = HashSet::new();
104 set.insert(ContributorRole::Software);
105 set.insert(ContributorRole::Software);
106 assert_eq!(set.len(), 1);
107 set.insert(ContributorRole::Validation);
108 assert_eq!(set.len(), 2);
109 }
110
111 #[test]
112 fn test_contributor_role_serde() {
113 let role = ContributorRole::Software;
114 let json = serde_json::to_string(&role).expect("JSON serialization should succeed");
115 let deserialized: ContributorRole =
116 serde_json::from_str(&json).expect("JSON deserialization should succeed");
117 assert_eq!(role, deserialized);
118 }
119}