livesplit_core/run/parser/
timer_kind.rs

1use alloc::borrow::Cow;
2
3use core::fmt;
4
5/// Describes the different Timers available that store splits files.
6#[derive(Clone, Eq, PartialEq, Hash, Debug)]
7pub enum TimerKind<'a> {
8    /// LiveSplit
9    LiveSplit,
10    /// WSplit
11    WSplit,
12    /// SplitterZ
13    SplitterZ,
14    /// ShitSplit
15    ShitSplit,
16    /// Splitty
17    Splitty,
18    /// Time Split Tracker
19    TimeSplitTracker,
20    /// Portal 2 Live Timer
21    Portal2LiveTimer,
22    /// FaceSplit
23    FaceSplit,
24    /// Flitter
25    Flitter,
26    /// Llanfair
27    Llanfair,
28    /// Gered's fork of Llanfair
29    LlanfairGered,
30    /// Urn
31    Urn,
32    /// SourceLiveTimer
33    SourceLiveTimer,
34    /// Splitterino
35    Splitterino,
36    /// SpeedRunIGT
37    SpeedRunIGT,
38    /// A Generic Timer. The name of the timer is associated with the variant.
39    /// "Generic Timer" is used if there is no known name.
40    Generic(Cow<'a, str>),
41}
42
43impl TimerKind<'_> {
44    /// Returns an owned version of the timer kind.
45    pub fn into_owned(self) -> TimerKind<'static> {
46        match self {
47            TimerKind::LiveSplit => TimerKind::LiveSplit,
48            TimerKind::WSplit => TimerKind::WSplit,
49            TimerKind::SplitterZ => TimerKind::SplitterZ,
50            TimerKind::ShitSplit => TimerKind::ShitSplit,
51            TimerKind::Splitty => TimerKind::Splitty,
52            TimerKind::TimeSplitTracker => TimerKind::TimeSplitTracker,
53            TimerKind::Portal2LiveTimer => TimerKind::Portal2LiveTimer,
54            TimerKind::FaceSplit => TimerKind::FaceSplit,
55            TimerKind::Flitter => TimerKind::Flitter,
56            TimerKind::Llanfair => TimerKind::Llanfair,
57            TimerKind::LlanfairGered => TimerKind::LlanfairGered,
58            TimerKind::Urn => TimerKind::Urn,
59            TimerKind::SourceLiveTimer => TimerKind::SourceLiveTimer,
60            TimerKind::Splitterino => TimerKind::Splitterino,
61            TimerKind::SpeedRunIGT => TimerKind::SpeedRunIGT,
62            TimerKind::Generic(v) => TimerKind::Generic(v.into_owned().into()),
63        }
64    }
65}
66
67impl fmt::Display for TimerKind<'_> {
68    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
69        f.write_str(match self {
70            TimerKind::LiveSplit => "LiveSplit",
71            TimerKind::WSplit => "WSplit",
72            TimerKind::SplitterZ => "SplitterZ",
73            TimerKind::ShitSplit => "ShitSplit",
74            TimerKind::Splitty => "Splitty",
75            TimerKind::TimeSplitTracker => "Time Split Tracker",
76            TimerKind::Portal2LiveTimer => "Portal 2 Live Timer",
77            TimerKind::FaceSplit => "FaceSplit",
78            TimerKind::Flitter => "Flitter",
79            TimerKind::Llanfair => "Llanfair",
80            TimerKind::LlanfairGered => "Llanfair (Gered's fork)",
81            TimerKind::Urn => "Urn",
82            TimerKind::SourceLiveTimer => "SourceLiveTimer",
83            TimerKind::Splitterino => "Splitterino",
84            TimerKind::SpeedRunIGT => "SpeedRunIGT",
85            TimerKind::Generic(name) => name,
86        })
87    }
88}