prettylogger/json.rs
1use std::{
2 fs::{
3 File,
4 read_to_string
5 },
6 io::Write,
7};
8
9use crate::{
10 Logger,
11 Error
12};
13
14impl Logger {
15 /// Creates a `Logger` instance from a JSON template as string.
16 ///
17 /// # Examples
18 ///
19 /// Deserializing `Logger` from a JSON string:
20 /// ```
21 /// # use prettylogger::Logger;
22 /// let pretty_json = serde_json::to_string_pretty(&Logger::default())
23 /// .expect("Failed to serialize logger!");
24 ///
25 /// let mut logger = Logger::from_template_str(&pretty_json)
26 /// .expect("Failed to deserialize logger!");
27 /// # let raw_json = serde_json::to_string(&Logger::default())
28 /// # .expect("Failed to serialize logger!");
29 /// # assert_eq!(Logger::default(), Logger::from_template_str(&pretty_json)
30 /// # .expect("Failed to deserialize logger!"));
31 /// # assert_eq!(Logger::default(), Logger::from_template_str(&raw_json)
32 /// # .expect("Failed to deserialize logger!"));
33 /// ```
34 pub fn from_template_str(template: &str) -> Result<Logger, Error> {
35 let result: Result<Logger, serde_json::Error>
36 = serde_json::from_str(template);
37 match result {
38 Ok(logger) => {
39 Ok(logger)
40 },
41 Err(e) => Err(Error::new(&e.to_string()))
42 }
43 }
44
45 /// Creates a `Logger` instance from a template file.
46 ///
47 /// # Examples
48 ///
49 /// Deserializing `Logger` from a JSON file:
50 /// ```
51 /// # use prettylogger::Logger;
52 /// # let mut path = std::env::temp_dir();
53 /// # path.push("libprettylogger-tests/from-template.json");
54 /// # let path = &path.to_str().unwrap().to_string();
55 /// # Logger::default().save_template(path);
56 /// let mut logger = Logger::from_template(path)
57 /// .expect("Failed to deserialize logger!");
58 /// # assert_eq!(Logger::default(), logger);
59 /// ```
60 pub fn from_template(path: &str) -> Result<Logger, Error> {
61 match read_to_string(path) {
62 Ok(contents) => {
63 Logger::from_template_str(&contents)
64 },
65 Err(e) => Err(Error::new(&e.to_string()))
66 }
67 }
68
69 /// Saves a `Logger` instance to template file.
70 ///
71 /// # Examples
72 ///
73 /// Serializing a `Logger` instance to a file:
74 /// ```
75 /// # use prettylogger::Logger;
76 /// # let mut path = std::env::temp_dir();
77 /// # path.push("libprettylogger-tests/from-template.json");
78 /// # let path = &path.to_str().unwrap().to_string();
79 /// let mut logger = Logger::default();
80 /// logger.save_template(path);
81 /// # assert_eq!(Logger::from_template(path)
82 /// .expect("Failed to deserialize logger!"), Logger::default());
83 /// ```
84 pub fn save_template(&self, path: &str) -> Result<(), Error> {
85 let json = serde_json::to_string_pretty(self);
86 match json {
87 Ok(json) => {
88 match File::create(path) {
89 Ok(mut file) => {
90 match file.write_all(json.as_bytes()) {
91 Ok(_) => Ok(()),
92 Err(e) => {
93 Err(Error::new(&e.to_string()))
94 }
95 }
96 },
97 Err(e) => Err(Error::new(&e.to_string()))
98 }
99 },
100 Err(e) => Err(Error::new(&e.to_string()))
101 }
102 }
103}