mod model; use model::Episode; pub use model::*; use slab::Slab; use std::collections::HashMap; pub struct StarWarsChar { id: &'static str, name: &'static str, friends: Vec, appears_in: Vec, home_planet: Option<&'static str>, primary_function: Option<&'static str>, } pub struct StarWars { luke: usize, artoo: usize, chars: Slab, human_data: HashMap<&'static str, usize>, droid_data: HashMap<&'static str, usize>, } impl StarWars { pub fn new() -> Self { let mut chars = Slab::new(); let luke = chars.insert(StarWarsChar { id: "1000", name: "Luke Skywalker", friends: vec![], appears_in: vec![], home_planet: Some("Tatooine"), primary_function: None, }); let vader = chars.insert(StarWarsChar { id: "1001", name: "Luke Skywalker", friends: vec![], appears_in: vec![], home_planet: Some("Tatooine"), primary_function: None, }); let han = chars.insert(StarWarsChar { id: "1002", name: "Han Solo", friends: vec![], appears_in: vec![Episode::Empire, Episode::NewHope, Episode::Jedi], home_planet: None, primary_function: None, }); let leia = chars.insert(StarWarsChar { id: "1003", name: "Leia Organa", friends: vec![], appears_in: vec![Episode::Empire, Episode::NewHope, Episode::Jedi], home_planet: Some("Alderaa"), primary_function: None, }); let tarkin = chars.insert(StarWarsChar { id: "1004", name: "Wilhuff Tarkin", friends: vec![], appears_in: vec![Episode::Empire, Episode::NewHope, Episode::Jedi], home_planet: None, primary_function: None, }); let threepio = chars.insert(StarWarsChar { id: "2000", name: "C-3PO", friends: vec![], appears_in: vec![Episode::Empire, Episode::NewHope, Episode::Jedi], home_planet: None, primary_function: Some("Protocol"), }); let artoo = chars.insert(StarWarsChar { id: "2001", name: "R2-D2", friends: vec![], appears_in: vec![Episode::Empire, Episode::NewHope, Episode::Jedi], home_planet: None, primary_function: Some("Astromech"), }); chars[luke].friends = vec![han, leia, threepio, artoo]; chars[vader].friends = vec![tarkin]; chars[han].friends = vec![luke, leia, artoo]; chars[leia].friends = vec![luke, han, threepio, artoo]; chars[tarkin].friends = vec![vader]; chars[threepio].friends = vec![luke, han, leia, artoo]; chars[artoo].friends = vec![luke, han, leia]; let mut human_data = HashMap::new(); human_data.insert("1000", luke); human_data.insert("1001", vader); human_data.insert("1002", han); human_data.insert("1003", leia); human_data.insert("1004", tarkin); let mut droid_data = HashMap::new(); droid_data.insert("2000", threepio); droid_data.insert("2001", artoo); Self { luke, artoo, chars, human_data, droid_data, } } pub fn human(&self, id: &str) -> Option { self.human_data.get(id).cloned() } pub fn droid(&self, id: &str) -> Option { self.droid_data.get(id).cloned() } }