artifacts/models/
monster_schema.rs1use 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 MonsterSchema {
7    #[serde(rename = "name")]
9    pub name: String,
10    #[serde(rename = "code")]
12    pub code: String,
13    #[serde(rename = "level")]
15    pub level: i32,
16    #[serde(rename = "type")]
18    pub r#type: models::MonsterType,
19    #[serde(rename = "hp")]
21    pub hp: i32,
22    #[serde(rename = "attack_fire")]
24    pub attack_fire: i32,
25    #[serde(rename = "attack_earth")]
27    pub attack_earth: i32,
28    #[serde(rename = "attack_water")]
30    pub attack_water: i32,
31    #[serde(rename = "attack_air")]
33    pub attack_air: i32,
34    #[serde(rename = "res_fire")]
36    pub res_fire: i32,
37    #[serde(rename = "res_earth")]
39    pub res_earth: i32,
40    #[serde(rename = "res_water")]
42    pub res_water: i32,
43    #[serde(rename = "res_air")]
45    pub res_air: i32,
46    #[serde(rename = "critical_strike")]
48    pub critical_strike: i32,
49    #[serde(rename = "initiative")]
51    pub initiative: i32,
52    #[serde(rename = "effects", skip_serializing_if = "Option::is_none")]
54    pub effects: Option<Vec<models::SimpleEffectSchema>>,
55    #[serde(rename = "min_gold")]
57    pub min_gold: i32,
58    #[serde(rename = "max_gold")]
60    pub max_gold: i32,
61    #[serde(rename = "drops")]
63    pub drops: Vec<models::DropRateSchema>,
64}
65
66impl MonsterSchema {
67    pub fn new(
68        name: String,
69        code: String,
70        level: i32,
71        r#type: models::MonsterType,
72        hp: i32,
73        attack_fire: i32,
74        attack_earth: i32,
75        attack_water: i32,
76        attack_air: i32,
77        res_fire: i32,
78        res_earth: i32,
79        res_water: i32,
80        res_air: i32,
81        critical_strike: i32,
82        initiative: i32,
83        min_gold: i32,
84        max_gold: i32,
85        drops: Vec<models::DropRateSchema>,
86    ) -> MonsterSchema {
87        MonsterSchema {
88            name,
89            code,
90            level,
91            r#type,
92            hp,
93            attack_fire,
94            attack_earth,
95            attack_water,
96            attack_air,
97            res_fire,
98            res_earth,
99            res_water,
100            res_air,
101            critical_strike,
102            initiative,
103            effects: None,
104            min_gold,
105            max_gold,
106            drops,
107        }
108    }
109}