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 #[cfg_attr(target_os = "linux", default)]
18 #[serde(rename = "uring-blocking")]
19 UringBlocking,
20
21 #[cfg_attr(not(target_os = "linux"), default)]
25 #[serde(rename = "std-blocking")]
26 StdBlocking,
27
28 #[serde(rename = "tokio")]
30 TokioIO,
31
32 #[serde(rename = "std-spawn-blocking")]
35 StdSpawnBlocking,
36}
37
38impl Display for IoMode {
39 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 write!(
41 f,
42 "{}",
43 match self {
44 IoMode::Uring => "uring",
45 IoMode::UringDirect => "uring-direct",
46 IoMode::UringBlocking => "uring-blocking",
47 IoMode::StdBlocking => "std-blocking",
48 IoMode::TokioIO => "tokio",
49 IoMode::StdSpawnBlocking => "std-spawn-blocking",
50 }
51 )
52 }
53}
54
55impl FromStr for IoMode {
56 type Err = String;
57
58 fn from_str(s: &str) -> Result<Self, Self::Err> {
59 Ok(match s {
60 "uring-direct" => IoMode::UringDirect,
61 "uring" => IoMode::Uring,
62 "uring-blocking" => IoMode::UringBlocking,
63 "std-blocking" => IoMode::StdBlocking,
64 "tokio" => IoMode::TokioIO,
65 "std-spawn-blocking" => IoMode::StdSpawnBlocking,
66 _ => return Err(format!("Invalid IO mode: {s}")),
67 })
68 }
69}