use super::Ecosystem;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Member {
pub id: &'static str,
pub settings_id: &'static str,
pub title: &'static str,
pub package: &'static str,
pub command: &'static str,
}
pub const MEMBERS: [Member; 10] = [
member("code", "code", "Code", "quvyta-code", "qcode"),
member("focus", "focus", "Focus", "quvyta-focus", "qfocus"),
member("tools", "tools", "Tools", "quvyta-tools", "qtools"),
member("packages", "packages", "Packages", "quvyta-packages", "qpac"),
member("desk", "desktop", "Desktop", "quvyta-desktop", "qdesk"),
member("explorer", "explorer", "Explorer", "quvyta-explorer", "qexp"),
member("cli", "cli", "CLI", "quvyta-cli", "qcli"),
member("browser", "browser", "Browser", "quvyta-browser", "qbrow"),
member("framework", "showcase", "Framework", "quvyta-framework-showcase", "qframe"),
member("quvyta", "launcher", "Quvyta", "quvyta", "quvyta"),
];
const fn member(
id: &'static str,
settings_id: &'static str,
title: &'static str,
package: &'static str,
command: &'static str,
) -> Member {
Member { id, settings_id, title, package, command }
}
impl Ecosystem {
#[must_use]
pub fn members(&self) -> &'static [Member] {
if *self == Self::QUVYTA { &MEMBERS } else { &[] }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_member_has_a_settings_file_of_its_own() {
let members = Ecosystem::QUVYTA.members();
for (index, member) in members.iter().enumerate() {
let before = &members[..index];
assert!(!before.iter().any(|other| other.settings_id == member.settings_id), "{member:?}");
assert!(!before.iter().any(|other| other.id == member.id), "{member:?}");
assert!(!before.iter().any(|other| other.command == member.command), "{member:?}");
assert_ne!(member.settings_id, Ecosystem::QUVYTA.id(), "`quvyta.conf` is the file every member shares");
}
}
#[test]
fn qdesk_keeps_its_settings_in_desktop_conf() {
let desk = MEMBERS.iter().find(|member| member.command == "qdesk").expect("qdesk");
assert_eq!((desk.id, desk.settings_id, desk.package), ("desk", "desktop", "quvyta-desktop"));
let launcher = MEMBERS.iter().find(|member| member.package == "quvyta").expect("the launcher");
assert_eq!(launcher.settings_id, "launcher");
}
#[test]
fn only_the_quvyta_ecosystem_has_members() {
assert_eq!(Ecosystem::QUVYTA.members().len(), MEMBERS.len());
assert!(Ecosystem::new("tools", "Tools").members().is_empty());
}
}