1use strum_macros::{Display, EnumString};
2
3use crate::prelude::*;
4
5use crate::currency::CurrencyUnit;
6
7#[declare]
8pub type GiftId = Uuid;
9
10#[derive(
11 Clone,
12 Debug,
13 Serialize,
14 Deserialize,
15 PartialEq,
16 Eq,
17 Copy,
18 JsonSchema,
19 EnumString,
20 Display,
21 Tsify,
22)]
23#[tsify(namespace)]
24pub enum GiftType {
25 VassalGift,
26 FollowerGift,
27 GenericGift,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
32pub struct GiftTemplate {
33 #[schemars(schema_with = "id_schema")]
34 pub id: Uuid,
35 #[schemars(title = "Тип подарка", description = "Тип подарка")]
36 pub gift_type: GiftType,
37 #[schemars(
38 title = "Цена подарка",
39 description = "Массив валют, которые нужны для отправки подарка"
40 )]
41 pub price: Vec<CurrencyUnit>,
42 #[schemars(
43 title = "Содержимое подарка",
44 description = "Массив валют, которые лежат в подарке"
45 )]
46 pub reward: Vec<CurrencyUnit>,
47 #[schemars(
48 title = "Лояльность за подарок",
49 description = "На сколько подарок увеличивает лояльность у сюзерена и вассала"
50 )]
51 pub loyalty: i64,
52}
53
54#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, CustomType, JsonSchema, Tsify)]
56pub struct Gift {
57 pub id: GiftId,
58 pub config_id: uuid::Uuid,
59 pub sender_id: uuid::Uuid,
60 pub receiver_id: uuid::Uuid,
61 pub claimed: bool,
62 pub reward: Vec<CurrencyUnit>,
63 pub loyalty: i64,
64}