Here's the issue - in your method, self is not the Heading, self is a mutable reference to the Heading. So if you assign to the self variable, you're only replacing that reference, not mutating the underlying object. Generally this isn't something you have to consider in Rust, as it does a lot of auto-dereferencing for you, but this is one case where you need to be explicit.
If you want to de-reference a reference and gain access to the underlying data, you can use the * operator - this makes your code work:
One other thing to note - if you want to replace the data behind a mutable reference but keep hold of the original value, you might run into borrow checker issues. The standard library provides a few functions to help with this, such as std::mem::replace and std::mem::swap. You don't need them here, but it's good to know they exist