Cannot assign to `xxxxx`, which is behind a `&` reference

Hello,
I'm new in Rust.
I want to change a value of struct in a vector, so I do that :

struct UserSession {
    hash: u128,
    user: String,
}

fn main() {
    let session_list = vec![
        UserSession {
            hash: 0,
            user: String::from("Marcello"),
        },
        UserSession {
            hash: 0,
            user: String::from("Omer"),
        },
    ];
    match session_list.iter().find(|x| x.user == "Carlos") {
        Some(user_session) => {
            user_session.hash = 4214431;
        }
        _ => {
            println!("Unknow user");
        }
    }
}

but this doesn't compile :

error[E0594]: cannot assign to `user_session.hash`, which is behind a `&` reference
  --> src/main.rs:19:13
   |
18 |         Some(user_session) => {
   |              ------------ consider changing this binding's type to be: `&mut UserSession`
19 |             user_session.hash = 4214431;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `user_session` is a `&` reference, so the data it refers to cannot be written

Certainly easy but not for me :frowning:

struct UserSession {
    hash: u128,
    user: String,
}

fn main() {
-   let session_list = vec![
+   let mut session_list = vec![
        UserSession {
            hash: 0,
            user: String::from("Marcello"),
        },
        UserSession {
            hash: 0,
            user: String::from("Omer"),
        },
    ];
-   match session_list.iter().find(|x| x.user == "Carlos") {
+   match session_list.iter_mut().find(|x| x.user == "Carlos") {
        Some(user_session) => {
            user_session.hash = 4214431;
        }
        _ => {
            println!("Unknow user");
        }
    }
}
1 Like

Thanks !!

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.