use core::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Callback {
OnInit,
OnInstSuccess,
OnInstFailed,
OnUserAbort,
OnGuiInit,
OnGuiEnd,
OnMouseOverSection,
OnVerifyInstDir,
OnSelChange,
OnRebootFailed,
}
impl Callback {
pub const ALL: [Callback; 10] = [
Callback::OnInit,
Callback::OnInstSuccess,
Callback::OnInstFailed,
Callback::OnUserAbort,
Callback::OnGuiInit,
Callback::OnGuiEnd,
Callback::OnMouseOverSection,
Callback::OnVerifyInstDir,
Callback::OnSelChange,
Callback::OnRebootFailed,
];
pub fn name(self) -> &'static str {
match self {
Callback::OnInit => ".onInit",
Callback::OnInstSuccess => ".onInstSuccess",
Callback::OnInstFailed => ".onInstFailed",
Callback::OnUserAbort => ".onUserAbort",
Callback::OnGuiInit => ".onGUIInit",
Callback::OnGuiEnd => ".onGUIEnd",
Callback::OnMouseOverSection => ".onMouseOverSection",
Callback::OnVerifyInstDir => ".onVerifyInstDir",
Callback::OnSelChange => ".onSelChange",
Callback::OnRebootFailed => ".onRebootFailed",
}
}
pub fn index(self) -> usize {
match self {
Callback::OnInit => 0,
Callback::OnInstSuccess => 1,
Callback::OnInstFailed => 2,
Callback::OnUserAbort => 3,
Callback::OnGuiInit => 4,
Callback::OnGuiEnd => 5,
Callback::OnMouseOverSection => 6,
Callback::OnVerifyInstDir => 7,
Callback::OnSelChange => 8,
Callback::OnRebootFailed => 9,
}
}
}
impl fmt::Display for Callback {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.name())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_in_index_order() {
for (i, cb) in Callback::ALL.iter().enumerate() {
assert_eq!(cb.index(), i);
}
}
#[test]
fn names_match_nsis_script() {
assert_eq!(Callback::OnInit.name(), ".onInit");
assert_eq!(Callback::OnGuiInit.name(), ".onGUIInit");
assert_eq!(Callback::OnRebootFailed.name(), ".onRebootFailed");
}
#[test]
fn display_uses_name() {
assert_eq!(Callback::OnInit.to_string(), ".onInit");
}
}