Coroutines and async/await 140 Therefore, our example will do the following: Avoid error handling. If anything fails, we panic. Be specific and not generic. Creating generic solutions introduces a lot of complexity and makes the underlying concepts harder to reason about since we consequently have to create extra abstraction levels. Our solution will have some generic aspects where needed, though. Be limited in what it can do. Y ou are of course free to expand, change, and play with all the examples (I encourage you to do so), but in the example, we only cover what we need and not anything more. Avoid macros. So, with that out of the way, let's get started on our example. The first thing you need to do is to create a new folder. This first example can be found in ch07/a-coroutine in the repository, so I suggest you name the folder a-coroutine as well. Then, initialize a new crate by entering the folder and write cargo init. Now that we have a new project up and running, we can create the modules and folders we need: First, in main. rs, declare two modules as follows: ch07/a-coroutine/src/main. rs mod http; mod future; Next, create two new files in the src folder: future. rs, which will hold our future-related code http. rs, which will be the code related to our HTTP client One last thing we need to do is to add a dependency on mio. We'll be using Tcp Stream from mio, as we'll build on this example in the following chapters and use mio as our non-blocking I/O library since we're already familiar with it: ch07/a-coroutine/Cargo. toml [dependencies] mio = { version = "0. 8", features = ["net", "os-poll"] } Let's start in future. rs and implement our future-related code first.