linux_fan_utility/
protocol.rs1use crate::config::FanAssignment;
10use crate::curve::{CurvePoint, FanCurve};
11use crate::hwmon::{FanStatus, TempStatus};
12use serde::{Deserialize, Serialize};
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
19#[serde(tag = "type")]
20pub enum Request {
21 #[serde(rename = "get_status")]
23 GetStatus,
24
25 #[serde(rename = "set_manual")]
27 SetManual { fan_id: String, pwm: u8 },
28
29 #[serde(rename = "set_curve")]
31 SetCurve {
32 fan_id: String,
33 curve_name: String,
34 temp_sensor_id: String,
35 },
36
37 #[serde(rename = "set_auto")]
39 SetAuto { fan_id: String },
40
41 #[serde(rename = "list_curves")]
43 ListCurves,
44
45 #[serde(rename = "upsert_curve")]
47 UpsertCurve {
48 name: String,
49 points: Vec<CurvePoint>,
50 },
51
52 #[serde(rename = "delete_curve")]
54 DeleteCurve { name: String },
55
56 #[serde(rename = "save_config")]
58 SaveConfig,
59
60 #[serde(rename = "reload_config")]
62 ReloadConfig,
63
64 #[serde(rename = "subscribe")]
66 Subscribe,
67
68 #[serde(rename = "unsubscribe")]
70 Unsubscribe,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
78#[serde(tag = "type")]
79pub enum Response {
80 #[serde(rename = "status")]
82 Status {
83 fans: Vec<FanStatus>,
84 temps: Vec<TempStatus>,
85 assignments: Vec<FanAssignmentInfo>,
86 },
87
88 #[serde(rename = "curves")]
90 Curves { curves: Vec<FanCurve> },
91
92 #[serde(rename = "ok")]
94 Ok { message: String },
95
96 #[serde(rename = "error")]
98 Error { message: String },
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct FanAssignmentInfo {
104 pub fan_id: String,
105 pub assignment: FanAssignment,
106}
107
108pub fn encode<T: Serialize>(msg: &T) -> Result<String, serde_json::Error> {
114 let mut s = serde_json::to_string(msg)?;
115 s.push('\n');
116 Ok(s)
117}
118
119pub fn decode<'a, T: Deserialize<'a>>(s: &'a str) -> Result<T, serde_json::Error> {
121 serde_json::from_str(s.trim())
122}