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}