steel_core/inventory/slots/
result_handler.rs1use std::sync::Arc;
2
3use steel_registry::item_stack::ItemStack;
4
5use crate::{
6 inventory::lock::{ContainerLockGuard, ContainerRef},
7 player::Player,
8};
9
10pub trait ResultHandler: Send + Sync {
12 fn result_container(&self) -> ContainerRef;
19
20 fn dependencies(&self) -> Vec<ContainerRef>;
25
26 fn update_result(&self, guard: &mut ContainerLockGuard);
28
29 fn on_result_taken(&self, guard: &mut ContainerLockGuard, player: &Player)
31 -> Option<ItemStack>;
32
33 fn is_result_valid(&self, guard: &ContainerLockGuard, player: &Player) -> bool;
35}
36
37impl<T: ResultHandler + ?Sized> ResultHandler for Arc<T> {
38 fn result_container(&self) -> ContainerRef {
39 (**self).result_container()
40 }
41
42 fn dependencies(&self) -> Vec<ContainerRef> {
43 (**self).dependencies()
44 }
45
46 fn update_result(&self, guard: &mut ContainerLockGuard) {
47 (**self).update_result(guard);
48 }
49
50 fn on_result_taken(
51 &self,
52 guard: &mut ContainerLockGuard,
53 player: &Player,
54 ) -> Option<ItemStack> {
55 (**self).on_result_taken(guard, player)
56 }
57
58 fn is_result_valid(&self, guard: &ContainerLockGuard, player: &Player) -> bool {
59 (**self).is_result_valid(guard, player)
60 }
61}