notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }