ap_manual 0.2.0

A rust package to cannonically interact with manual AP worlds
Documentation

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
    }
}