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}