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 rerun: Option<RerunConfig>,
9 pub camera: HashMap<String, CameraConfig>,
10 }
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 }