stepper_motion/config/
system.rs1use heapless::{FnvIndexMap, String};
4use serde::Deserialize;
5
6use super::motor::MotorConfig;
7use super::trajectory::{TrajectoryConfig, WaypointTrajectory};
8
9#[derive(Debug, Clone, Deserialize)]
11pub struct SystemConfig {
12 pub motors: FnvIndexMap<String<32>, MotorConfig, 8>,
14
15 #[serde(default)]
17 pub trajectories: FnvIndexMap<String<32>, TrajectoryConfig, 64>,
18
19 #[serde(default)]
21 pub sequences: FnvIndexMap<String<32>, WaypointTrajectory, 16>,
22}
23
24impl SystemConfig {
25 pub fn motor(&self, name: &str) -> Option<&MotorConfig> {
27 self.motors
28 .iter()
29 .find(|(k, _)| k.as_str() == name)
30 .map(|(_, v)| v)
31 }
32
33 pub fn trajectory(&self, name: &str) -> Option<&TrajectoryConfig> {
35 self.trajectories
36 .iter()
37 .find(|(k, _)| k.as_str() == name)
38 .map(|(_, v)| v)
39 }
40
41 pub fn sequence(&self, name: &str) -> Option<&WaypointTrajectory> {
43 self.sequences
44 .iter()
45 .find(|(k, _)| k.as_str() == name)
46 .map(|(_, v)| v)
47 }
48
49 pub fn motor_names(&self) -> impl Iterator<Item = &str> {
51 self.motors.keys().map(|s| s.as_str())
52 }
53
54 pub fn trajectory_names(&self) -> impl Iterator<Item = &str> {
56 self.trajectories.keys().map(|s| s.as_str())
57 }
58
59 pub fn sequence_names(&self) -> impl Iterator<Item = &str> {
61 self.sequences.keys().map(|s| s.as_str())
62 }
63}
64
65impl Default for SystemConfig {
66 fn default() -> Self {
67 Self {
68 motors: FnvIndexMap::new(),
69 trajectories: FnvIndexMap::new(),
70 sequences: FnvIndexMap::new(),
71 }
72 }
73}