我有一段代码,它会读取input.csv
文件,在其中插入一列并将结果写入到output.csv
文件中。
extern crate csv;
use std::path::Path;
struct User {
reference: String,
email: String,
firstname: String,
lastname: String
}
fn main() {
let mut rdr = csv::Reader::from_file("/tmp/input.csv").unwrap().has_headers(false);
let mut wtr = csv::Writer::from_file(Path::new("/tmp/output.csv")).unwrap();
let users = get_users();
for record in rdr.decode() {
let rec: Option<Vec<String>> = match record {
Ok(rec) => Some(rec),
Err(e) => None
};
match rec {
Some(mut r) => {
let usr = users.iter().find(|&ur| ur.reference == r[27].to_string());
match usr {
Some(u) => r.insert(1, u.email),
None => r.insert(1, "Unknown".to_string())
}
wtr.write(r.iter());
}
None => {}
};
}
}
fn get_users() -> Vec<User> {
//retrieve users
}
并且它给了我一个错误:
error: cannot move out of borrowed content
Some(u) => r.insert(1, u.email),
^
我理解它对u.email
感到不安,因为r
试图取得它的所有权(?), 但如何最好地处理这种情况呢?
u.email.clone()
正是我所需要的。 - Caballero