fret_runtime/capabilities/
exec.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
4#[serde(rename_all = "snake_case")]
5pub enum ExecBackgroundWork {
6 #[default]
7 Threads,
8 Cooperative,
9 None,
10}
11
12impl ExecBackgroundWork {
13 pub fn as_str(self) -> &'static str {
14 match self {
15 Self::None => "none",
16 Self::Cooperative => "cooperative",
17 Self::Threads => "threads",
18 }
19 }
20
21 pub fn clamp_to_available(self, available: Self) -> Self {
22 use ExecBackgroundWork::*;
23 match (self, available) {
24 (None, _) => None,
25 (_, None) => None,
26 (Cooperative, Cooperative | Threads) => Cooperative,
27 (Threads, Threads) => Threads,
28 (Threads, Cooperative) => Cooperative,
29 }
30 }
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
34#[serde(rename_all = "snake_case")]
35pub enum ExecWake {
36 #[default]
37 Reliable,
38 BestEffort,
39 None,
40}
41
42impl ExecWake {
43 pub fn as_str(self) -> &'static str {
44 match self {
45 Self::None => "none",
46 Self::BestEffort => "best_effort",
47 Self::Reliable => "reliable",
48 }
49 }
50
51 pub fn clamp_to_available(self, available: Self) -> Self {
52 use ExecWake::*;
53 match (self, available) {
54 (None, _) => None,
55 (_, None) => None,
56 (BestEffort, BestEffort | Reliable) => BestEffort,
57 (Reliable, Reliable) => Reliable,
58 (Reliable, BestEffort) => BestEffort,
59 }
60 }
61}
62
63#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
64#[serde(rename_all = "snake_case")]
65pub enum ExecTimers {
66 #[default]
67 Reliable,
68 BestEffort,
69 None,
70}
71
72impl ExecTimers {
73 pub fn as_str(self) -> &'static str {
74 match self {
75 Self::None => "none",
76 Self::BestEffort => "best_effort",
77 Self::Reliable => "reliable",
78 }
79 }
80
81 pub fn clamp_to_available(self, available: Self) -> Self {
82 use ExecTimers::*;
83 match (self, available) {
84 (None, _) => None,
85 (_, None) => None,
86 (BestEffort, BestEffort | Reliable) => BestEffort,
87 (Reliable, Reliable) => Reliable,
88 (Reliable, BestEffort) => BestEffort,
89 }
90 }
91}
92
93#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
94#[serde(default)]
95pub struct ExecCapabilities {
96 pub background_work: ExecBackgroundWork,
97 pub wake: ExecWake,
98 pub timers: ExecTimers,
99}