prettylogger/
json.rs

1use crate::*;
2use serde_json;
3use std::{
4    fs::*,
5    io::Write,
6};
7use crate::fileio::{expand_env_vars, expand_tilde};
8
9impl Logger {
10    /// Creates a `Logger` instance from a template file.
11    ///
12    /// Automatically expands env variables.
13    ///
14    /// [Logger templates documentation.](https://github.com/tpaau-17DB/libprettylogger?tab=readme-ov-file#logger-templates)
15    ///
16    /// # Example
17    /// ```
18    /// # use prettylogger::Logger;
19    /// # let mut path = std::env::temp_dir();
20    /// # path.push("libprettylogger-tests/from-template.json");
21    /// # let path = &path.to_str().unwrap().to_string();
22    /// # Logger::default().save_template(path);
23    /// let mut logger = Logger::from_template(path);
24    /// ```
25    pub fn from_template(path: &str) -> Logger {
26        let path = expand_env_vars(&expand_tilde(path));
27
28        let file = read_to_string(path)
29            .expect("Unable to read file!");
30        let mut logger: Logger = serde_json::from_str(&file)
31            .expect("Invalid JSON file!");
32
33        logger.log_count += 1;
34        logger.show_datetime = logger.log_format.contains("%d");
35
36        return logger;
37    }
38
39    /// Saves a `Logger` to template file.
40    ///
41    /// Automatically expands env variables.
42    ///
43    /// [Logger templates documentation](https://github.com/tpaau-17DB/libprettylogger?tab=readme-ov-file#logger-templates)
44    ///
45    /// # Example
46    /// ```
47    /// # use prettylogger::Logger;
48    /// # let mut path = std::env::temp_dir();
49    /// # path.push("libprettylogger-tests/from-template.json");
50    /// # let path = &path.to_str().unwrap().to_string();
51    /// let mut logger = Logger::default();
52    /// logger.save_template(path);
53    /// ```
54    pub fn save_template(&self, path: &str) {
55        let path = expand_env_vars(&expand_tilde(path));
56
57        let json = serde_json::to_string_pretty(self)
58            .expect("Failed to serialize");
59
60        let mut file = File::create(path)
61            .expect("Unable to create file");
62
63        file.write_all(json.as_bytes())
64            .expect("Unable to write data");
65    }
66}