Skip to main content

agent_can/daemon/
config.rs

1use crate::types::BusConfig;
2use serde::{Deserialize, Serialize};
3use std::path::Path;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct DaemonConfig {
7    pub bus: String,
8    pub adapter: String,
9    pub dbc_path: String,
10    pub bitrate: u32,
11    pub bitrate_data: u32,
12    pub fd_capable: bool,
13}
14
15impl DaemonConfig {
16    pub fn bus_config(&self) -> BusConfig {
17        BusConfig {
18            bus: self.bus.clone(),
19            adapter: self.adapter.clone(),
20            dbc_path: self.dbc_path.clone(),
21            bitrate: self.bitrate,
22            bitrate_data: self.bitrate_data,
23            fd_capable: self.fd_capable,
24        }
25    }
26}
27
28pub fn write_daemon_config(path: &Path, config: &DaemonConfig) -> Result<(), String> {
29    let payload =
30        serde_json::to_vec(config).map_err(|err| format!("failed to serialize config: {err}"))?;
31    std::fs::write(path, payload)
32        .map_err(|err| format!("failed to write daemon config '{}': {err}", path.display()))
33}
34
35pub fn read_daemon_config(path: &Path) -> Result<DaemonConfig, String> {
36    let payload = std::fs::read(path)
37        .map_err(|err| format!("failed to read daemon config '{}': {err}", path.display()))?;
38    serde_json::from_slice(&payload)
39        .map_err(|err| format!("failed to decode daemon config '{}': {err}", path.display()))
40}