Skip to main content

use_folding/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4use use_angle::Angle;
5
6/// A fold assignment.
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum FoldAssignment {
9    /// A mountain fold.
10    Mountain,
11    /// A valley fold.
12    Valley,
13    /// An unassigned fold.
14    Unassigned,
15}
16
17/// A fold assignment with an angle.
18#[derive(Debug, Clone, Copy, PartialEq)]
19pub struct FoldState {
20    assignment: FoldAssignment,
21    angle: Angle,
22}
23
24impl FoldState {
25    /// Creates a fold state.
26    #[must_use]
27    pub const fn new(assignment: FoldAssignment, angle: Angle) -> Self {
28        Self { assignment, angle }
29    }
30
31    /// Returns the assignment.
32    #[must_use]
33    pub const fn assignment(self) -> FoldAssignment {
34        self.assignment
35    }
36
37    /// Returns the angle.
38    #[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}