use std::fmt; use tmdb::model::*; // Struct for movie entries pub struct MovieEntry { pub title: String, pub id: u64, pub director: String, pub year: String, pub language: String, } impl MovieEntry { // Create movie entry from results pub fn from(movie: SearchMovie) -> MovieEntry { MovieEntry { title: movie.title, id: movie.id, director: String::from("N/A"), year: String::from(movie.release_date.split('-').next().unwrap_or("N/A")), language: get_long_lang(movie.original_language.as_str()), } } // Generate desired filename from movie entry pub fn rename_format(&self, mut format: String) -> String { format = format.replace("{title}", self.title.as_str()); if self.year.as_str() != "N/A" { format = format.replace("{year}", self.year.as_str()); } else { format = format.replace("{year}", ""); } if self.director.as_str() != "N/A" { format = format.replace("{director}", self.director.as_str()); } else { format = format.replace("{director}", ""); } format } } // Implement display trait for movie entries impl fmt::Display for MovieEntry { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let mut buffer = String::new(); buffer.push_str(&format!("{} ", self.title)); buffer.push_str(&format!("({}), ", self.year)); buffer.push_str(&format!("Language: {}, ", self.language)); buffer.push_str(&format!("Directed by: {}, ", self.director)); buffer.push_str(&format!("TMDb ID: {}", self.id)); // buffer.push_str(&format!("Synopsis: {}", self.overview)); write!(f, "{}", buffer) } } pub struct Language { pub short: String, pub long: String, } impl Language { // Generate a vector of Language entries of all supported languages pub fn generate_list() -> Vec { let mut list = Vec::new(); for lang in ["en", "hi", "bn", "fr", "ja", "de", "sp", "none"] { list.push(Language { short: lang.to_string(), long: get_long_lang(lang), }); } list } } // Implement display trait for Language impl fmt::Display for Language { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", self.long) } } // Get long name of a language fn get_long_lang(short: &str) -> String { let long = match short { "en" => "English", "hi" => "Hindi", "bn" => "Bengali", "fr" => "French", "ja" => "Japanese", "de" => "German", "sp" => "Spanish", "none" => "None", other => other, }; long.to_string() }