lib.rs 895 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. use std::collections::HashMap;
  2. struct Context {
  3. variables: Vec<String>,
  4. var_lookup: HashMap<String, Var>,
  5. }
  6. #[derive(Debug, PartialEq, Eq, Hash, Clone, Copy)]
  7. struct Var {
  8. idx: usize,
  9. }
  10. impl Context {
  11. fn var(&mut self, name: &str) -> Var {
  12. if let Some(v) = self.var_lookup.get(name) {
  13. return *v;
  14. }
  15. let idx = self.variables.len();
  16. let var = Var { idx };
  17. self.variables.push(name.to_string());
  18. self.var_lookup.insert(name.to_string(), var);
  19. var
  20. }
  21. }
  22. impl Var {
  23. fn show<'r>(&self, ctx: &'r Context) -> &'r str {
  24. &ctx.variables[self.idx]
  25. }
  26. }
  27. struct StoryState {
  28. variables: HashMap<Var, Vec<Var>>,
  29. }
  30. struct Story {
  31. state: StoryState,
  32. storylets: Vec<Storylet>,
  33. }
  34. struct Storylet {
  35. }
  36. #[cfg(test)]
  37. mod tests {
  38. #[test]
  39. fn it_works() {
  40. assert_eq!(2 + 2, 4);
  41. }
  42. }