use alloc::borrow::Cow;
use core::fmt;
#[derive(Clone, Eq, PartialEq, Hash, Debug)]
pub enum TimerKind<'a> {
LiveSplit,
WSplit,
SplitterZ,
ShitSplit,
Splitty,
TimeSplitTracker,
Portal2LiveTimer,
FaceSplit,
Flitter,
Llanfair,
LlanfairGered,
Urn,
SourceLiveTimer,
Splitterino,
SpeedRunIGT,
Generic(Cow<'a, str>),
}
impl TimerKind<'_> {
pub fn into_owned(self) -> TimerKind<'static> {
match self {
TimerKind::LiveSplit => TimerKind::LiveSplit,
TimerKind::WSplit => TimerKind::WSplit,
TimerKind::SplitterZ => TimerKind::SplitterZ,
TimerKind::ShitSplit => TimerKind::ShitSplit,
TimerKind::Splitty => TimerKind::Splitty,
TimerKind::TimeSplitTracker => TimerKind::TimeSplitTracker,
TimerKind::Portal2LiveTimer => TimerKind::Portal2LiveTimer,
TimerKind::FaceSplit => TimerKind::FaceSplit,
TimerKind::Flitter => TimerKind::Flitter,
TimerKind::Llanfair => TimerKind::Llanfair,
TimerKind::LlanfairGered => TimerKind::LlanfairGered,
TimerKind::Urn => TimerKind::Urn,
TimerKind::SourceLiveTimer => TimerKind::SourceLiveTimer,
TimerKind::Splitterino => TimerKind::Splitterino,
TimerKind::SpeedRunIGT => TimerKind::SpeedRunIGT,
TimerKind::Generic(v) => TimerKind::Generic(v.into_owned().into()),
}
}
}
impl fmt::Display for TimerKind<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
TimerKind::LiveSplit => "LiveSplit",
TimerKind::WSplit => "WSplit",
TimerKind::SplitterZ => "SplitterZ",
TimerKind::ShitSplit => "ShitSplit",
TimerKind::Splitty => "Splitty",
TimerKind::TimeSplitTracker => "Time Split Tracker",
TimerKind::Portal2LiveTimer => "Portal 2 Live Timer",
TimerKind::FaceSplit => "FaceSplit",
TimerKind::Flitter => "Flitter",
TimerKind::Llanfair => "Llanfair",
TimerKind::LlanfairGered => "Llanfair (Gered's fork)",
TimerKind::Urn => "Urn",
TimerKind::SourceLiveTimer => "SourceLiveTimer",
TimerKind::Splitterino => "Splitterino",
TimerKind::SpeedRunIGT => "SpeedRunIGT",
TimerKind::Generic(name) => name,
})
}
}