terra_items/
slot.rs

1use super::Item;
2use crate::Prefix;
3use std::num::TryFromIntError;
4use terra_types::{PositiveI16, PositiveI32};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7pub struct ItemSlot {
8	pub item: Item,
9	pub prefix: Option<Prefix>,
10	pub count: PositiveI32,
11}
12
13impl From<SingleItemSlot> for ItemSlot {
14	fn from(value: SingleItemSlot) -> Self {
15		ItemSlot {
16			item: value.item,
17			prefix: value.prefix,
18			count: PositiveI32::new(1).expect("In bounds"),
19		}
20	}
21}
22
23impl From<WorldItemSlot> for ItemSlot {
24	fn from(value: WorldItemSlot) -> Self {
25		ItemSlot {
26			item: value.item,
27			prefix: value.prefix,
28			count: PositiveI32::new(value.count.get() as i32).expect("In bounds"),
29		}
30	}
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
34pub struct SingleItemSlot {
35	pub item: Item,
36	pub prefix: Option<Prefix>,
37}
38
39impl From<ItemSlot> for SingleItemSlot {
40	fn from(item_slot: ItemSlot) -> Self {
41		SingleItemSlot {
42			item: item_slot.item,
43			prefix: item_slot.prefix,
44		}
45	}
46}
47
48impl From<WorldItemSlot> for SingleItemSlot {
49	fn from(item_slot: WorldItemSlot) -> Self {
50		SingleItemSlot {
51			item: item_slot.item,
52			prefix: item_slot.prefix,
53		}
54	}
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
58pub struct WorldItemSlot {
59	pub item: Item,
60	pub prefix: Option<Prefix>,
61	pub count: PositiveI16,
62}
63
64impl TryFrom<ItemSlot> for WorldItemSlot {
65	type Error = TryFromIntError;
66	fn try_from(value: ItemSlot) -> Result<Self, Self::Error> {
67		Ok(WorldItemSlot {
68			item: value.item,
69			prefix: value.prefix,
70			count: PositiveI16::new(i16::try_from(value.count.get())?).expect("In bounds"),
71		})
72	}
73}
74
75impl From<SingleItemSlot> for WorldItemSlot {
76	fn from(value: SingleItemSlot) -> Self {
77		WorldItemSlot {
78			item: value.item,
79			prefix: value.prefix,
80			count: PositiveI16::new(1).expect("In bounds"),
81		}
82	}
83}