#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct App {
pub name: &'static str,
pub version: &'static str,
pub repository_url: &'static str,
pub trust_anchor: &'static [u8],
pub activation: ActivationStrategy,
pub self_test: Option<SelfTest>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ActivationStrategy {
UnixSymlink,
WindowsLauncher {
launcher_name: &'static str,
protocol: u32,
},
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct SelfTest {
pub args: &'static [&'static str],
pub timeout: std::time::Duration,
}
impl App {
pub fn payload_name(&self, windows: bool) -> String {
if windows {
format!("{}.exe", self.name)
} else {
self.name.to_string()
}
}
pub fn host_payload_name(&self) -> String {
self.payload_name(cfg!(windows))
}
pub fn launcher_name(&self) -> Option<&'static str> {
match self.activation {
ActivationStrategy::UnixSymlink => None,
ActivationStrategy::WindowsLauncher { launcher_name, .. } => Some(launcher_name),
}
}
pub fn launcher_protocol(&self) -> Option<u32> {
match self.activation {
ActivationStrategy::UnixSymlink => None,
ActivationStrategy::WindowsLauncher { protocol, .. } => Some(protocol),
}
}
pub fn metadata_filename(&self) -> String {
format!("{}-release.json", self.name)
}
pub fn signature_filename(&self) -> String {
format!("{}-release.signatures.json", self.name)
}
pub fn root_name(&self, version: &semver::Version, triple: &str) -> String {
format!("{}-{version}-{triple}", self.name)
}
pub fn archive_prefix(&self) -> String {
format!("{}-", self.name)
}
}