chalkydri/
config.rs

1use crate::error::Error;
2use std::{collections::HashMap, fs::File, io::Read, path::Path};
3
4#[derive(Deserialize, Serialize)]
5pub struct Config {
6    pub team_number: u16,
7    //pub version: String,
8    pub rerun: Option<RerunConfig>,
9    pub camera: HashMap<String, CameraConfig>,
10    //pub tpu: Option<TpuConfig>,
11    //pub backends: HashMap<Backend, BackendConfig>,
12}
13impl Config {
14    pub fn load(path: impl AsRef<Path>) -> Result<Self, Error> {
15        let mut f = File::open(path).map_err(|_| Error::FailedToReadConfig)?;
16        let mut buf = String::new();
17        f.read_to_string(&mut buf).unwrap();
18        toml::from_str(&buf).map_err(|_| Error::InvalidConfig)
19    }
20}
21
22
23#[derive(Deserialize, Serialize)]
24pub struct RerunConfig {
25    pub server_address: Option<String>,
26}
27
28#[derive(Deserialize, Serialize)]
29pub struct CameraConfig {
30    pub kind: CameraKind,
31    pub id: Option<usize>,
32    pub resolution: Option<CameraResolution>,
33}
34
35#[derive(Deserialize, Serialize)]
36pub struct CameraResolution {
37    pub width: u32,
38    pub height: u32,
39}
40
41#[derive(Deserialize, Serialize)]
42#[serde(rename_all = "snake_case")]
43pub enum CameraKind {
44    PiCam,
45    Usb,
46}
47
48#[derive(Deserialize, Serialize)]
49pub struct TpuConfig {
50    //pub kind: tfledge::CoralDeviceKind,
51}