I\'m new to Rust and trying to wrap my head around the ownership/borrowing concept. Now I have reduced my code to this minimal code sample that gives a compile error.
<I'm still in the everything is copied by value mindset, where it is perfectly legal to do self.color as that would get me a copy of Color. Apparently, I am wrong. I found some other questions about this same error on SO, but no solution to my issue.
Anything that can be copied in rust must be explicitly mared with a trait Copy
. Copy
was implicit in the past but that was changed (rfc).
As I understand it, the field is owned by whomever owns the Display. Since I only borrowed a reference to the Display, I don't own it. Extracting color attempts to transfer ownership of the Color to me, which is not possible since I don't own the Display. Is this correct?
Yes. When you encounter this error there are three possible solutions:
Copy
for the type (if appropriate)Clone
(self.color.clone()
)To solve this you derive Copy
for Color
:
#[derive(Copy, Clone)]
pub enum Color {
Blue = 0x1,
Red = 0x4,
}
This is the same as:
impl Copy for Color {}