liquid_cache_common/
io_mode.rs1use std::{fmt::Display, str::FromStr};
2
3use serde::Serialize;
4
5#[derive(Debug, Clone, Copy, PartialEq, Default, Serialize)]
7pub enum IoMode {
8 #[serde(rename = "uring-direct")]
10 UringDirect,
11
12 #[serde(rename = "uring")]
14 Uring,
15
16 #[serde(rename = "uring-multi-async")]
18 #[cfg_attr(target_os = "linux", default)]
19 UringMultiAsync,
20
21 #[serde(rename = "uring-shared")]
23 UringShared,
24
25 #[serde(rename = "uring-blocking")]
27 UringBlocking,
28
29 #[cfg_attr(not(target_os = "linux"), default)]
33 #[serde(rename = "std-blocking")]
34 StdBlocking,
35
36 #[serde(rename = "tokio")]
38 TokioIO,
39
40 #[serde(rename = "std-spawn-blocking")]
43 StdSpawnBlocking,
44}
45
46impl Display for IoMode {
47 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48 write!(
49 f,
50 "{}",
51 match self {
52 IoMode::Uring => "uring",
53 IoMode::UringDirect => "uring-direct",
54 IoMode::UringMultiAsync => "uring-multi-async",
55 IoMode::UringShared => "uring-shared",
56 IoMode::UringBlocking => "uring-blocking",
57 IoMode::StdBlocking => "std-blocking",
58 IoMode::TokioIO => "tokio",
59 IoMode::StdSpawnBlocking => "std-spawn-blocking",
60 }
61 )
62 }
63}
64
65impl FromStr for IoMode {
66 type Err = String;
67
68 fn from_str(s: &str) -> Result<Self, Self::Err> {
69 Ok(match s {
70 "uring-direct" => IoMode::UringDirect,
71 "uring" => IoMode::Uring,
72 "uring-multi-async" => IoMode::UringMultiAsync,
73 "uring-shared" => IoMode::UringShared,
74 "uring-blocking" => IoMode::UringBlocking,
75 "std-blocking" => IoMode::StdBlocking,
76 "tokio" => IoMode::TokioIO,
77 "std-spawn-blocking" => IoMode::StdSpawnBlocking,
78 _ => return Err(format!("Invalid IO mode: {s}")),
79 })
80 }
81}