use std::collections::HashMap;
use serde::{Serialize,Deserialize};
use crate::{bool_is_false, ItemOrList};
#[derive(Debug,Serialize,Deserialize,PartialEq, Eq,Clone)]
pub struct RequireOr{
or: String
}
#[derive(Debug,Serialize,Deserialize,PartialEq, Eq,Clone)]
#[serde(untagged,expecting="String or object {or: String}")]
pub enum RequireItem{
Single(String),
Or(RequireOr)
}
#[derive(Debug,Serialize,Deserialize,PartialEq, Eq,Clone)]
pub struct Region{
#[serde(default)]
pub requires: ItemOrList<RequireItem>,
#[serde(default)]
pub connects_to: Vec<String>,
#[serde(default,skip_serializing_if="bool_is_false")]
pub starting: bool,
#[serde(default,skip_serializing_if="ItemOrList::is_empty")]
pub exit_requires: ItemOrList<RequireItem>,
#[serde(default,skip_serializing_if="ItemOrList::is_empty")]
pub entrance_requires: ItemOrList<RequireItem>,
}
#[derive(Debug,Serialize,Deserialize,PartialEq, Eq,Clone,Default)]
pub struct Regions{
#[serde(flatten)]
pub regions: HashMap<String,Region>
}
impl Regions{
pub fn with_region(mut self,name: String,r: Region)->Self{
self.regions.insert(name, r);
self
}
}