use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct JunkReward {
pub name: String,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ItemReward {
pub name: String,
pub qty: u32,
pub total_weight: f32,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(tag = "item_type", content = "reward")]
pub enum Reward {
#[serde(rename = "junk")]
Junk(JunkReward),
#[serde(rename = "trade_item")]
TradeItem(ItemReward),
#[serde(rename = "treasure")]
Treasure(ItemReward),
}
impl Reward {
pub fn get_item_type(&self) -> Option<String> {
match self {
Reward::Treasure(_) => Some("treasure"),
Reward::TradeItem(_) => Some("trade_item"),
Reward::Junk(_) => Some("junk"),
}
.map(str::to_string)
}
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub enum EncounterResult {
Failure {
failure_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
severity: Option<String>,
},
RewardSpec {
item_types: Vec<String>,
},
Reward {
items: Vec<Reward>,
},
}