smmo_api/models/
item.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{
4    custom_serde::{bool_from_int, bool_from_int_str, ok_or_default},
5    models::SmmoModel,
6};
7
8#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
9pub struct Item {
10    pub id: ItemId,
11
12    pub name: String,
13
14    #[serde(rename = "type")]
15    pub item_type: ItemType,
16
17    pub description: Option<String>,
18
19    #[serde(deserialize_with = "bool_from_int_str::deserialize")]
20    pub equipable: bool,
21
22    pub level: u64,
23
24    pub rarity: ItemRarity,
25
26    pub value: u64,
27
28    #[serde(deserialize_with = "ok_or_default::deserialize")]
29    pub stat1: Option<ItemStat>,
30
31    #[serde(default)]
32    pub stat1modifier: u32,
33
34    #[serde(deserialize_with = "ok_or_default::deserialize")]
35    pub stat2: Option<ItemStat>,
36
37    #[serde(default)]
38    pub stat2modifier: u32,
39
40    #[serde(deserialize_with = "ok_or_default::deserialize")]
41    pub stat3: Option<ItemStat>,
42
43    #[serde(default)]
44    pub stat3modifier: u32,
45
46    #[serde(deserialize_with = "bool_from_int::deserialize")]
47    pub custom_item: bool,
48
49    #[serde(deserialize_with = "bool_from_int::deserialize")]
50    pub tradable: bool,
51
52    #[serde(deserialize_with = "bool_from_int::deserialize")]
53    pub locked: bool,
54}
55
56#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Deserialize, Serialize)]
57pub struct ItemId(u64);
58
59impl SmmoModel for Item {
60    const TYPE_NAME: &'static str = "Item";
61}
62
63#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Deserialize, Serialize)]
64#[serde(untagged)]
65pub enum ItemType {
66    Weapon,
67    Helmet,
68    Amulet,
69    Armour,
70    Shield,
71    Greaves,
72    Boots,
73    Special,
74    Pet,
75    #[serde(rename(deserialize = "Wood Axe"))]
76    WoodAxe,
77    Pickaxe,
78    #[serde(rename(deserialize = "Fishing Rod"))]
79    FishingRod,
80    Shovel,
81    Material,
82}
83
84#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Deserialize, Serialize)]
85#[serde(untagged)]
86pub enum ItemRarity {
87    Common,
88    Uncommon,
89    Rare,
90    Epic,
91    Elite,
92    Legendary,
93    Exotic,
94    Celestial,
95}
96
97#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Deserialize, Serialize)]
98#[serde(untagged)]
99#[serde(rename_all = "lowercase")]
100pub enum ItemStat {
101    Str,
102    Def,
103    Dex,
104    Crit,
105}