1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::block::{Block, Dimension};
use crate::item::Item;
#[derive(Clone, Debug)]
pub struct Bin {
block: Block,
}
impl Bin {
pub fn new(dims: [Dimension; 3]) -> Self {
Self {
block: Block::new(dims[0], dims[1], dims[2]),
}
}
pub fn does_item_fit(&self, item: &Item<'_>) -> bool {
self.block.does_it_fit(&item.block)
}
pub fn best_fit(self, item: &Item<'_>) -> Option<Vec<Bin>> {
self.block
.best_fit(&item.block)
.map(|blocks| blocks.into_iter().map(|block| Bin::from(block)).collect())
}
}
impl From<Block> for Bin {
fn from(block: Block) -> Self {
Bin::new([block.dims[0], block.dims[1], block.dims[2]])
}
}