What does something move out of input? I don't think the language works here.
I read the chapter on borrowing in the book and I found it absurdly terse for one of the most complicated parts of the language. Now I'm trying to iterate in a nested loop and am getting this.
It sounds like you should show the particular code in question. It depends on the situation, e.g. if you call the .into_iter method on a Vec, that destroys it because into_iter takes self rather than &self or &mut self.
In Rust we say that a variable “owns” its value. “Moving” a value means transferring it from one owner to another. We say that it moves out of the original variable and into some other location.
let foo = input; // moves a value out of `input` and into `foo`
or passing it to a function by value:
f(input); // moves a value out of `input` and into a parameter of `f`
or calling a method that takes its self argument by value:
// moves a value out of `input` and into the `self` parameter of `consume`
input.consume();