token_handler.rs (1553B)
1 use tokenator::{ParseError, ParseErrorOwned, TokenParser, TokenSerializable, TokenWriter}; 2 3 use crate::{storage, DataPath, DataPathType, Directory}; 4 5 pub struct TokenHandler { 6 directory: Directory, 7 file_name: &'static str, 8 } 9 10 impl TokenHandler { 11 pub fn new(path: &DataPath, path_type: DataPathType, file_name: &'static str) -> Self { 12 let directory = Directory::new(path.path(path_type)); 13 14 Self { 15 directory, 16 file_name, 17 } 18 } 19 20 pub fn save( 21 &self, 22 tokenator: &impl TokenSerializable, 23 delim: &'static str, 24 ) -> crate::Result<()> { 25 let mut writer = TokenWriter::new(delim); 26 27 tokenator.serialize_tokens(&mut writer); 28 let to_write = writer.str(); 29 30 storage::write_file( 31 &self.directory.file_path, 32 self.file_name.to_owned(), 33 to_write, 34 ) 35 } 36 37 pub fn load<T: TokenSerializable>( 38 &self, 39 delim: &'static str, 40 ) -> crate::Result<Result<T, ParseErrorOwned>> { 41 match self.directory.get_file(self.file_name.to_owned()) { 42 Ok(s) => { 43 let data = s.split(delim).collect::<Vec<&str>>(); 44 let mut parser = TokenParser::new(&data); 45 Ok(TokenSerializable::parse_from_tokens(&mut parser).map_err(ParseError::into)) 46 } 47 Err(e) => Err(e), 48 } 49 } 50 51 pub fn clear(&self) -> crate::Result<()> { 52 storage::write_file(&self.directory.file_path, self.file_name.to_owned(), "") 53 } 54 }