Skip to main content

use_origami/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4/// A compact origami model summary.
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct OrigamiModel {
7    crease_count: usize,
8    face_count: usize,
9}
10
11impl OrigamiModel {
12    /// Creates an origami model summary.
13    #[must_use]
14    pub const fn new(crease_count: usize, face_count: usize) -> Option<Self> {
15        if face_count > 0 {
16            Some(Self {
17                crease_count,
18                face_count,
19            })
20        } else {
21            None
22        }
23    }
24
25    /// Returns the crease count.
26    #[must_use]
27    pub const fn crease_count(self) -> usize {
28        self.crease_count
29    }
30
31    /// Returns the face count.
32    #[must_use]
33    pub const fn face_count(self) -> usize {
34        self.face_count
35    }
36}
37
38#[cfg(test)]
39mod tests {
40    use super::OrigamiModel;
41
42    #[test]
43    fn stores_origami_model_counts() {
44        let model = OrigamiModel::new(8, 4).expect("valid model");
45
46        assert_eq!(model.crease_count(), 8);
47        assert_eq!(model.face_count(), 4);
48        assert_eq!(OrigamiModel::new(8, 0), None);
49    }
50}