1/6

Ownership is tracked per field, not only per value.

Moving one field out of a struct leaves the struct partially moved: the field you took is dead, every other field is still readable.

struct Account { id: String, balance: i64 }

let acct = Account { id: String::from("GA7Q"), balance: 250 };
let id = acct.id;              // moves out just this field
println!("{}", acct.balance);  // fine
println!("{}", acct.id);       // error: value moved
println!("{:?}", acct);        // error: `acct` is not whole any more