Coroutines, Self-Referential Structs, and Pinning 240 Tip In this book's Git Hub repository, you'll find a function called stack_pinning_macro() in the ch09/d-pin/src/main. rs file. This function shows the preceding example but using Rust's pin! macro. Pin projections and structural pinning Before we leave the topic of pinning, we'll quickly explain what pin projections and structural pinning are. Both sound complex, but they are very simple in practice. The following diagram shows how these terms are connected: Figure 9. 5-Pin projection and structural pinning Structural pinning means that if a struct is pinned, so is the field. We expose this through pin projections, as we'll see in the following code example. If we continue with our example and create a struct called Foo that holds both Maybe Self Ref (field a) and a String type (field b), we could write two projections that return a pinned version of a and a regular mutable reference to b: ch09/d-pin/src/main. rs #[derive(Default)] struct Foo { a: Maybe Self Ref, b: String, } 