1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4use use_angle::Angle;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum FoldAssignment {
9 Mountain,
11 Valley,
13 Unassigned,
15}
16
17#[derive(Debug, Clone, Copy, PartialEq)]
19pub struct FoldState {
20 assignment: FoldAssignment,
21 angle: Angle,
22}
23
24impl FoldState {
25 #[must_use]
27 pub const fn new(assignment: FoldAssignment, angle: Angle) -> Self {
28 Self { assignment, angle }
29 }
30
31 #[must_use]
33 pub const fn assignment(self) -> FoldAssignment {
34 self.assignment
35 }
36
37 #[must_use]
39 pub const fn angle(self) -> Angle {
40 self.angle
41 }
42}
43
44#[cfg(test)]
45mod tests {
46 use super::{FoldAssignment, FoldState};
47 use use_angle::Angle;
48
49 #[test]
50 fn stores_fold_states() {
51 let fold = FoldState::new(FoldAssignment::Mountain, Angle::from_degrees(90.0));
52
53 assert_eq!(fold.assignment(), FoldAssignment::Mountain);
54 assert_eq!(fold.angle().degrees(), 90.0);
55 }
56}