movie-rename/src/structs.rs
2022-12-09 14:48:52 -06:00

96 lines
2.8 KiB
Rust

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<Language> {
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()
}