Step 1-Improving our runtime design by adding a Reactor and a Waker 191 Changing the Future definition Since our Future definition is in the future. rs file, we start by opening that file. The first thing we need to change is to pull in the Waker so that we can use it. At the top of the file, add the following code: ch08/b-reactor-executor/src/future. rs use crate::runtime::Waker; The next thing we do is to change our Future trait so that it takes &Waker as an argument: ch08/b-reactor-executor/src/future. rs pub trait Future { type Output; fn poll(&mut self, waker: &Waker )-> Poll State<Self::Output>; } At this point, you have a choice. We won't be using the join_all function or the Join All<F: Future> struct going forward. If you don't want to keep them, you can just delete everything related to join_all, and that's all you need to do in future. rs. If you want to keep them for further experimentation, you need to change the Future implementation for Join All so that it accepts a waker: &Waker argument, and remember to pass the Waker when polling the joined futures in match fut. poll(waker). The remaining things to do in step 1 are to make some minor changes where we implement the Future trait. Let's start in http. rs. The first thing we do is adjust our dependencies a little to reflect the changes we made to our runtime module, and we add a dependency on our new Waker. Replace the dependencies section at the top of the file with this: ch08/b-reactor-executor/src/http. rs use crate::{future::Poll State, runtime::{self, reactor, Waker}, Future}; use mio::Interest; use std::io::{Error Kind, Read, Write};