1mod file_help;
2mod side_models;
3
4use side_models::{Word, Language};
5use std::fs::File;
6use std::error::Error;
7
8pub struct Manager {
9 pub file: File,
10 pub langs: Vec<Language>,
11 pub words: Vec<Word>,
12 pub def_lang: i32
13} impl Manager {
14 pub fn new(direc: &str, name: &str) -> Manager {
15 Manager {
16 file: file_help::open(
17 direc.to_string(),
18 name.to_string(),
19 "csv".to_string()
20 ),
21 langs: Vec::new(),
22 words: Vec::new(),
23 def_lang: 0
25 }
26 }
27
28 pub fn parse(&mut self) {
29 let mut content = file_help::read(&mut self.file);
30 let lines: Vec<&str> = content.split("\n").collect();
31
32 let first_row: Vec<&str> = lines.first().unwrap().split(",").collect();
33
34 for current_row in 1..lines.len() {
43 let row_vec: Vec<&str> = lines[current_row].split(",").collect();
44 let word_index: i32 = match row_vec.first().unwrap().trim().parse() {
45 Ok(i) => i,
46 Err(why) => panic!("Not an index for words in row {}. Error: {}", current_row, why.description())
47 };
48 for lang_id in 1..first_row.len() {
49 match row_vec.get(lang_id) {
50 Some(val) => { self.words.push(Word::new(word_index, lang_id as i32 - 1, val));
51 },
53 None => println!("Hey")
54 }
55 }
56 }
57
58 for lang_i in 1..first_row.len() {
60 self.langs.push(Language::new(lang_i as i32 - 1, first_row[lang_i]));
61 }
62 }
63
64 pub fn set_def(&mut self, lang_id: i32) {
66 self.def_lang = lang_id + 1
67 }
68
69 pub fn get_def(&self) -> (&Language, Vec<&Word>) {
70 let mut word_vec: Vec<&Word> = Vec::new();
72 for word in &self.words {
73 if word.lang_id == (self.def_lang - 1) {
74 word_vec.push(word)
75 }
76 }
77
78 if self.def_lang != 0 {
79 if let Some(lang) = self.langs.get((self.def_lang - 1) as usize) {
81 return (lang, word_vec)
83 } else {
84 panic!("Couldn't find set default language")
85 }
86 } else {
87 panic!("No default language set!");
88 }
89 }
90
91 pub fn get_word(&self, word_id: i32) -> &Word {
93 for word in &self.words {
94 if word.lang_id == self.def_lang - 1 && word.id == word_id {
95 return word
96 }
97 }
98 panic!("Couldn't find a word with id {} at set def. lang. {}", word_id, self.def_lang);
99 }
100
101}