mod category;
mod details;
mod experience;
mod influence;
mod mods;
mod properties;
mod quality;
mod rarity;
mod sockets;
pub use self::category::*;
pub use self::details::ItemDetails;
pub use self::experience::Experience;
pub use self::influence::Influence;
pub use self::mods::{Mod, ModType};
pub use self::properties::Properties;
pub use self::quality::Quality;
pub use self::rarity::Rarity;
pub use self::sockets::*;
use std::collections::HashMap;
use std::iter;
use serde_json::Value as Json;
use super::util::Quasi;
#[derive(Debug)]
pub struct Item {
pub id: String,
pub name: Option<String>,
pub base: String,
pub level: u64,
pub category: Quasi<ItemCategory>,
pub rarity: Rarity,
pub quality: Quality,
pub properties: Properties, pub details: Option<ItemDetails>,
pub sockets: ItemSockets, pub extra: HashMap<String, Json>,
pub requirements: HashMap<Requirement, u32>,
pub corrupted: bool,
pub influence: Option<Influence>,
pub duplicated: bool,
pub flavour_text: Option<String>,
}
impl Item {
#[inline]
pub fn is_elder(&self) -> bool {
self.influence == Some(Influence::Elder)
}
#[inline]
pub fn is_shaped(&self) -> bool {
self.influence == Some(Influence::Shaper)
}
#[inline]
pub fn is_unique(&self) -> bool {
self.rarity == Rarity::Unique
}
#[inline]
pub fn is_identified(&self) -> bool {
self.details.as_ref().map(|d| d.is_identified()).unwrap_or(true)
}
#[inline]
pub fn mods<'i>(&'i self) -> Box<Iterator<Item=&'i Mod> + 'i> {
self.details.as_ref().map(|d| d.mods()).unwrap_or_else(|| Box::new(iter::empty()))
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum Requirement {
Level,
Strength,
Dexterity,
Intelligence,
}