1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct OrigamiModel {
7 crease_count: usize,
8 face_count: usize,
9}
10
11impl OrigamiModel {
12 #[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 #[must_use]
27 pub const fn crease_count(self) -> usize {
28 self.crease_count
29 }
30
31 #[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}