Skip to main content

artifacts/models/
item_schema.rs

1use crate::models;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
5#[cfg_attr(feature = "specta", derive(specta::Type))]
6pub struct ItemSchema {
7    /// Item name.
8    #[serde(rename = "name")]
9    pub name: String,
10    /// Item code. This is the item's unique identifier (ID).
11    #[serde(rename = "code")]
12    pub code: String,
13    /// Item level.
14    #[serde(rename = "level")]
15    pub level: u32,
16    /// Item type.
17    #[serde(rename = "type")]
18    pub r#type: String,
19    /// Item subtype.
20    #[serde(rename = "subtype")]
21    pub subtype: String,
22    /// Item description.
23    #[serde(rename = "description")]
24    pub description: String,
25    /// Item conditions. If applicable. Conditions for using or equipping the item.
26    #[serde(rename = "conditions", skip_serializing_if = "Option::is_none")]
27    pub conditions: Option<Vec<models::ConditionSchema>>,
28    /// List of object effects. For equipment, it will include item stats.
29    #[serde(rename = "effects", skip_serializing_if = "Option::is_none")]
30    pub effects: Option<Vec<models::SimpleEffectSchema>>,
31    /// Craft information. If applicable.
32    #[serde(rename = "craft", skip_serializing_if = "Option::is_none")]
33    pub craft: Option<Box<models::CraftSchema>>,
34    /// Item tradeable status. A non-tradeable item cannot be exchanged or sold.
35    #[serde(rename = "tradeable")]
36    pub tradeable: bool,
37    /// Item recyclable status. A recyclable item can be recycled at the matching workshop.
38    #[serde(rename = "recyclable", skip_serializing_if = "Option::is_none")]
39    pub recyclable: Option<bool>,
40}
41
42impl ItemSchema {
43    pub fn new(
44        name: String,
45        code: String,
46        level: u32,
47        r#type: String,
48        subtype: String,
49        description: String,
50        tradeable: bool,
51    ) -> ItemSchema {
52        ItemSchema {
53            name,
54            code,
55            level,
56            r#type,
57            subtype,
58            description,
59            conditions: None,
60            effects: None,
61            craft: None,
62            tradeable,
63            recyclable: None,
64        }
65    }
66}