This is a simplified example of my situation:
use std::sync::mpsc::{Sender, Receiver};
use std::sync::mpsc;
use std::thread;
struct User {
reference: String,
email: String,
}
fn main() {
let rows = vec![
vec!["abcd", "test@test.com"],
vec!["efgh", "test1@test.com"],
vec!["wfee", "test2@test.com"],
vec!["rrgr", "test3@test.com"],
];
let chunk_len = (rows.len() / 2) as usize;
let mut chunks = Vec::new();
for chunk in rows.chunks(chunk_len) {
chunks.push(chunk);
}
let (tx, rx): (Sender<Vec<User>>, Receiver<Vec<User>>) = mpsc::channel();
for chunk in chunks {
let thread_tx = tx.clone();
thread::spawn(move || {
let result = chunk
.iter()
.map(|row| {
User {
reference: row[0].to_string(),
email: row[1].to_string(),
}
})
.collect::<Vec<User>>();
thread_tx.send(result).unwrap();
});
}
let mut users = Vec::new();
for _ in 0..chunk_len {
users.push(rx.recv());
}
}
and it's throwing an error
error[E0597]: `rows` does not live long enough
--> src/main.rs:20:18
|
20 | for chunk in rows.chunks(chunk_len) {
| ^^^^ does not live long enough
...
47 | }
| - borrowed value only lives until here
|
= note: borrowed value must be valid for the static lifetime...
I tried to change to chunks.push(chunk.clone());
but the error still wouldn't go away. What am I missing here?