1use super::Ecosystem;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
23pub struct Member {
24 pub id: &'static str,
27 pub settings_id: &'static str,
32 pub title: &'static str,
35 pub package: &'static str,
37 pub command: &'static str,
39}
40
41pub const MEMBERS: [Member; 10] = [
45 member("code", "code", "Code", "quvyta-code", "qcode"),
46 member("focus", "focus", "Focus", "quvyta-focus", "qfocus"),
47 member("tools", "tools", "Tools", "quvyta-tools", "qtools"),
48 member("packages", "packages", "Packages", "quvyta-packages", "qpac"),
49 member("desk", "desktop", "Desktop", "quvyta-desktop", "qdesk"),
50 member("explorer", "explorer", "Explorer", "quvyta-explorer", "qexp"),
51 member("cli", "cli", "CLI", "quvyta-cli", "qcli"),
52 member("browser", "browser", "Browser", "quvyta-browser", "qbrow"),
53 member("framework", "showcase", "Framework", "quvyta-framework-showcase", "qframe"),
54 member("quvyta", "launcher", "Quvyta", "quvyta", "quvyta"),
55];
56
57const fn member(
58 id: &'static str,
59 settings_id: &'static str,
60 title: &'static str,
61 package: &'static str,
62 command: &'static str,
63) -> Member {
64 Member { id, settings_id, title, package, command }
65}
66
67impl Ecosystem {
68 #[must_use]
71 pub fn members(&self) -> &'static [Member] {
72 if *self == Self::QUVYTA { &MEMBERS } else { &[] }
73 }
74}
75
76#[cfg(test)]
77mod tests {
78 use super::*;
79
80 #[test]
81 fn every_member_has_a_settings_file_of_its_own() {
82 let members = Ecosystem::QUVYTA.members();
83 for (index, member) in members.iter().enumerate() {
84 let before = &members[..index];
85 assert!(!before.iter().any(|other| other.settings_id == member.settings_id), "{member:?}");
86 assert!(!before.iter().any(|other| other.id == member.id), "{member:?}");
87 assert!(!before.iter().any(|other| other.command == member.command), "{member:?}");
88 assert_ne!(member.settings_id, Ecosystem::QUVYTA.id(), "`quvyta.conf` is the file every member shares");
89 }
90 }
91
92 #[test]
93 fn qdesk_keeps_its_settings_in_desktop_conf() {
94 let desk = MEMBERS.iter().find(|member| member.command == "qdesk").expect("qdesk");
95 assert_eq!((desk.id, desk.settings_id, desk.package), ("desk", "desktop", "quvyta-desktop"));
96 let launcher = MEMBERS.iter().find(|member| member.package == "quvyta").expect("the launcher");
97 assert_eq!(launcher.settings_id, "launcher");
98 }
99
100 #[test]
101 fn only_the_quvyta_ecosystem_has_members() {
102 assert_eq!(Ecosystem::QUVYTA.members().len(), MEMBERS.len());
103 assert!(Ecosystem::new("tools", "Tools").members().is_empty());
104 }
105}