use serde::{Deserialize, Serialize};
#[derive(
Copy, Clone, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize,
)]
#[serde(rename_all = "snake_case")]
pub enum DeadlineClass {
#[default]
ThisFrame,
NextFrame,
SceneTransition,
LoadingScreen,
BackgroundStreaming,
SpeculativePrefetch,
}
impl DeadlineClass {
pub const ALL: [DeadlineClass; 6] = [
DeadlineClass::ThisFrame,
DeadlineClass::NextFrame,
DeadlineClass::SceneTransition,
DeadlineClass::LoadingScreen,
DeadlineClass::BackgroundStreaming,
DeadlineClass::SpeculativePrefetch,
];
pub const fn priority(self) -> u8 {
match self {
DeadlineClass::ThisFrame => 0,
DeadlineClass::NextFrame => 1,
DeadlineClass::SceneTransition => 2,
DeadlineClass::LoadingScreen => 3,
DeadlineClass::BackgroundStreaming => 4,
DeadlineClass::SpeculativePrefetch => 5,
}
}
pub const fn as_str(self) -> &'static str {
match self {
DeadlineClass::ThisFrame => "this_frame",
DeadlineClass::NextFrame => "next_frame",
DeadlineClass::SceneTransition => "scene_transition",
DeadlineClass::LoadingScreen => "loading_screen",
DeadlineClass::BackgroundStreaming => "background_streaming",
DeadlineClass::SpeculativePrefetch => "speculative_prefetch",
}
}
}
impl std::fmt::Display for DeadlineClass {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}