I am learning to using rust to do some work. I am using this code to find element from Vec in rust:
let filtered_music:Vec<Music> = musics.iter()
.filter(|item| item.source_id == fav.source_id)
.collect();
the next step I want to put he element to another object:
let curr_music = &filtered_music[0];
let fav_resp = FavMusicResponse{
id: (&fav.id.to_string()).parse().unwrap(),
song_id: None,
created_time: 0,
updated_time: 0,
user_id: 0,
source_id: fav.source_id.to_string(),
like_status: 0,
source: 0,
playlist_id: 0,
play_count: 0,
fetched_download_url: None,
downloaded: None,
music: curr_music
};
but the compiler tell me expected Music
, found &Music
, what should I do to fix it? This is my minimal example about this problem that could run in https://play.rust-lang.org/ to reproduce this situation:
fn main() {
println!("Hello, world!");
let musics:Vec<Music> = Vec::new();
let filtered_music:Vec<&Music> = musics.into_iter()
.filter(|item| item.source_id == "1")
.collect();
let resp = MusicRes{
music: filtered_music[0]
};
}
pub struct Music {
pub id: i64,
pub name: String,
pub artists: String,
pub album_id: i64,
pub publishtime: i64,
pub status: i32,
pub duration: i32,
pub source_id: String,
pub source: i32,
pub created_time: i64,
pub updated_time:i64,
pub album: String,
pub fetched_download_url: i32
}
pub struct MusicRes {
pub music:Music
}