inkling 0.12.5

Limited implementation of the Ink markup language.
Documentation
#[cfg(not(feature = "serde_support"))]
#[test]
fn serde_support_tests() {
    panic!("Feature `serde_support` must be activated to run these integration tests");
}

#[cfg(all(feature = "serde_support", test))]
pub mod tests {
    use inkling::*;
    use serde_json;

    #[test]
    fn serialization_saves_current_state() {
        let content = "

-> passage

== passage ==

A crossing! Which path do you take?

+   Left -> torch
+   Right -> dark_room
    
== dark_room ==
You enter a dark room.

+   {torch} Use your torch to light the way forward. 
+   Head back.
-> passage

== torch ==
In a small chamber further in you find a torch. 
You head back.
-> passage

";

        let mut story = read_story_from_string(content).unwrap();
        let mut line_buffer = Vec::new();

        story.start().unwrap();
        story.resume(&mut line_buffer).unwrap();

        let serialized_without_torch = serde_json::to_string(&story).unwrap();
        let mut state_without_torch: Story =
            serde_json::from_str(&serialized_without_torch).unwrap();

        state_without_torch.make_choice(1).unwrap();

        let choices_without_torch = state_without_torch
            .resume(&mut line_buffer)
            .unwrap()
            .get_choices()
            .unwrap();

        story.make_choice(0).unwrap();

        story.resume(&mut line_buffer).unwrap();

        let serialized_with_torch = serde_json::to_string(&story).unwrap();
        let mut state_with_torch: Story = serde_json::from_str(&serialized_with_torch).unwrap();

        state_with_torch.make_choice(1).unwrap();

        let choices_with_torch = state_with_torch
            .resume(&mut line_buffer)
            .unwrap()
            .get_choices()
            .unwrap();

        assert_eq!(choices_without_torch.len(), 1);
        assert_eq!(choices_with_torch.len(), 2);
    }
}