Rust: Flattening nested struct to Vec
First of all, there is no need to use iter_mut() on conferences, as you never change the original rankings. As we clone the teams later, we can simply use

let mut raw_teams: Vec&lt;Vec&lt;Vec&lt;Team&gt;&gt;&gt; = rankings
    .conferences
    .iter()
    .map(|c| c.divisions.iter().map(|d| d.teams.clone()).collect())
    .collect();


Now that we have a Vec&lt;Vec&lt;Vec&lt;Team&gt;&gt;, we can call flatten:

let flattened_teams: Vec&lt;Team&gt; = raw_teams.into_iter().flatten().flatten().collect();


I used into_iter() as your original code left raw_teams empty.

However, we can skip raw_teams entirely if we use flat_map instead of map(…).flatten():

let flattened_teams: Vec&lt;Team&gt; = rankings
    .conferences
    .iter()
    .flat_map(|c| &amp;c.divisions) // need to borrow due to iter()
    .flat_map(|d| &amp;d.teams)     // need to borrow due to iter()
    .cloned()                   // clone the elements
    .collect();


If we don't want to borrow, we can of course just move everything into flattened_teams by simply removing cloned() and &amp;:

let flattened_teams : Vec&lt;Team&gt; = rankings
    .conferences
    .into_iter()
    .flat_map(|c| c.divisions)
    .flat_map(|d| d.teams)
    .collect()


None of these functions use mut.