scopinator_types/
enums.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5#[non_exhaustive]
6pub enum TrackingRate {
7 Sidereal,
8 Lunar,
9 Solar,
10 King,
11 Custom,
12 Off,
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
17#[non_exhaustive]
18pub enum SlewState {
19 Idle,
20 Slewing,
21 Tracking,
22 Parked,
23 Homing,
24 Error,
25}
26
27#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
29#[non_exhaustive]
30pub enum CameraState {
31 Idle,
32 Waiting,
33 Exposing,
34 Reading,
35 Downloading,
36 Error,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41#[non_exhaustive]
42pub enum PierSide {
43 East,
44 West,
45 Unknown,
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51 use proptest::prelude::*;
52
53 fn tracking_rates() -> impl Strategy<Value = TrackingRate> {
54 prop_oneof![
55 Just(TrackingRate::Sidereal),
56 Just(TrackingRate::Lunar),
57 Just(TrackingRate::Solar),
58 Just(TrackingRate::King),
59 Just(TrackingRate::Custom),
60 Just(TrackingRate::Off),
61 ]
62 }
63
64 fn slew_states() -> impl Strategy<Value = SlewState> {
65 prop_oneof![
66 Just(SlewState::Idle),
67 Just(SlewState::Slewing),
68 Just(SlewState::Tracking),
69 Just(SlewState::Parked),
70 Just(SlewState::Homing),
71 Just(SlewState::Error),
72 ]
73 }
74
75 fn camera_states() -> impl Strategy<Value = CameraState> {
76 prop_oneof![
77 Just(CameraState::Idle),
78 Just(CameraState::Waiting),
79 Just(CameraState::Exposing),
80 Just(CameraState::Reading),
81 Just(CameraState::Downloading),
82 Just(CameraState::Error),
83 ]
84 }
85
86 fn pier_sides() -> impl Strategy<Value = PierSide> {
87 prop_oneof![
88 Just(PierSide::East),
89 Just(PierSide::West),
90 Just(PierSide::Unknown),
91 ]
92 }
93
94 proptest! {
95 #[test]
96 fn tracking_rate_roundtrip(rate in tracking_rates()) {
97 let s = serde_json::to_string(&rate).unwrap();
98 let back: TrackingRate = serde_json::from_str(&s).unwrap();
99 prop_assert_eq!(rate, back);
100 }
101
102 #[test]
103 fn slew_state_roundtrip(state in slew_states()) {
104 let s = serde_json::to_string(&state).unwrap();
105 let back: SlewState = serde_json::from_str(&s).unwrap();
106 prop_assert_eq!(state, back);
107 }
108
109 #[test]
110 fn camera_state_roundtrip(state in camera_states()) {
111 let s = serde_json::to_string(&state).unwrap();
112 let back: CameraState = serde_json::from_str(&s).unwrap();
113 prop_assert_eq!(state, back);
114 }
115
116 #[test]
117 fn pier_side_roundtrip(side in pier_sides()) {
118 let s = serde_json::to_string(&side).unwrap();
119 let back: PierSide = serde_json::from_str(&s).unwrap();
120 prop_assert_eq!(side, back);
121 }
122 }
123}