cannibals/
cannibals.rs

1#![allow(dead_code)]
2
3use std::collections::{BTreeMap, BTreeSet};
4
5use serde::Deserialize;
6
7#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize)]
8enum Bank {
9    #[serde(rename = "N")]
10    North,
11
12    #[serde(rename = "W")]
13    West,
14
15    #[serde(rename = "E")]
16    East,
17
18    #[serde(rename = "S")]
19    South,
20}
21
22#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize)]
23enum Person {
24    #[serde(rename = "c1_OF_PERSON")]
25    Cannibal1,
26
27    #[serde(rename = "c2_OF_PERSON")]
28    Cannibal2,
29
30    #[serde(rename = "m1_OF_PERSON")]
31    Missionary1,
32
33    #[serde(rename = "m2_OF_PERSON")]
34    Missionary2,
35}
36
37#[derive(Clone, Debug, Deserialize)]
38struct State {
39    pub bank_of_boat: Bank,
40    pub who_is_on_bank: BTreeMap<Bank, BTreeSet<Person>>,
41}
42
43fn main() {
44    let data = include_str!("../tests/fixtures/MissionariesAndCannibals.itf.json");
45    let trace: itf::Trace<State> = itf::trace_from_str(data).unwrap();
46
47    dbg!(trace);
48}