Coroutines and async/await 156 of the main goals is to take a look at the differences between the code we write and what it transforms into. In addition to that, macros can get quite complex to read and understand unless you work a lot with them on a regular basis. Instead, corofy is a normal Rust program you can find in the repository under ch07/corofy. If you enter that folder, you can install the tool globally by writing the following: cargo install--path. Now you can use the tool from anywhere. It works by providing it with an input file containing the coroutine/wait syntax, such as corofy. /src/main. rs [optional output file]. If you don't specify an output file, it will create a file in the same folder postfixed with _corofied. Note The tool is extremely limited. The honest reason why is that I want to finish this example before we reach the year 2300, and I finished rewriting the entire Rust compiler from scratch just to give a robust experience using the coroutine/wait keywords. It turns out that writing transformations like this without access to Rust's type system is very difficult. The main use case for this tool will be to transform the examples we write here, but it would probably work for slight variations of the same examples as well (like adding more wait points or doing more interesting tasks in between each wait point). Take a look at the README for corofy for more information about its limitations. One more thing: I assume that you specified no explicit output file going forward so the output file will have the same name as the input file postfixed with _corofied. The program reads the file you give it and searches for usages of the coroutine keyword. It takes these functions, comments them out (so they're still in the file), puts them last in the file, and writes out the state machine implementation directly below, indicating what parts of the state machine are the code you actually wrote between the wait points. Now that I've introduced our new tool, it's time to put it to use. b-async-await—an example of a coroutine/wait transformation Let's start by expanding our example slightly. Now that we have a program that writes out our state machines, it's easier for us to create some examples and cover some more complex parts of our coroutine implementation.