ap_manual 0.2.0

A rust package to cannonically interact with manual AP worlds
Documentation
use serde::{Serialize,Deserialize};

use crate::item::Item;
fn default_index()->i32{
    1
}
/// Cannonical representation of the Game json
#[derive(Debug,Serialize,Deserialize,PartialEq, Eq,Clone)]
pub struct Game{
    pub game: String,
    #[serde(alias="player")]
    pub creator: String,
    pub filler_item_name: String,
    pub starting_items: Vec<Item>,
    #[serde(default)]
    pub death_link: bool,
    #[serde(default="default_index")]
    pub starting_index: i32
}
impl Game{
    /// Create a simple game, using default options for everything else
    pub fn simple(game: String, creator: String, filler_item_name: String)->Self{
        Self{
            game,creator,filler_item_name,starting_items: vec![],death_link: false,starting_index: 1
        }
    }
    /// add a starting item
    pub fn add_starting_item(&mut self, item: Item){
        self.starting_items.push(item);
    }
    pub fn with_start_item(mut self,item: Item)->Self{
        self.add_starting_item(item);
        self
    }
    pub fn with_deathlink(mut self)->Self{
        self.death_link=true;
        self
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderCF{
    creator: String,
    filler_item_name: String,
}
impl GameBuilderCF{
    pub fn with_game(self,game: String)->Game{
        Game::simple(game, self.creator, self.filler_item_name)
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderCG{
    creator: String,
    game: String
}

impl GameBuilderCG{
    pub fn with_filler_item_name(self,name: String)->Game{
        Game::simple(self.game, self.creator, name)
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderFG{
    filler_item_name: String,
    game: String
}
impl GameBuilderFG{
    pub fn with_creator(self,creator: String)->Game{
        Game::simple(self.game, creator, self.filler_item_name)
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderG{
    game: String
}
impl GameBuilderG{
    pub fn with_creator(self,creator: String)->GameBuilderCG{
        GameBuilderCG { creator, game: self.game }
    }
    pub fn with_filler_item_name(self,name: String)->GameBuilderFG{
        GameBuilderFG { filler_item_name: name, game: self.game }
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderC{
    creator: String
}
impl GameBuilderC{
    pub fn with_filler_item_name(self,name: String)->GameBuilderCF{
        GameBuilderCF { creator: self.creator, filler_item_name: name }
    }
    pub fn with_game(self,game: String)->GameBuilderCG{
        GameBuilderCG {creator: self.creator, game}
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilderF{
    filler_item_name: String
}
impl GameBuilderF{
    pub fn with_creator(self,creator: String)->GameBuilderCF{
        GameBuilderCF { creator, filler_item_name: self.filler_item_name }
    }
    pub fn with_game(self,game: String)->GameBuilderFG{
        GameBuilderFG { filler_item_name: self.filler_item_name, game }
    }
}
#[derive(Debug,Clone,PartialEq, Eq)]
pub struct GameBuilder{}
impl GameBuilder{
    pub fn with_game(self,game: String)->GameBuilderG{
        GameBuilderG { game }
    }
    pub fn with_creator(self,creator: String)->GameBuilderC{
        GameBuilderC { creator }
    }
    pub fn with_filler_item_name(self,name: String)->GameBuilderF{
        GameBuilderF { filler_item_name:name }
    }
}

impl Game{
    pub fn builder()->GameBuilder{
        GameBuilder {  }
    }
}