1 //! The delete roller.
2 //!
3 //! Requires the `delete_roller` feature.
4 
5 use std::error::Error;
6 use std::fs;
7 use std::path::Path;
8 
9 use append::rolling_file::policy::compound::roll::Roll;
10 #[cfg(feature = "file")]
11 use file::{Deserialize, Deserializers};
12 
13 /// Configuration for the delete roller.
14 #[cfg(feature = "file")]
15 #[derive(Deserialize)]
16 #[serde(deny_unknown_fields)]
17 pub struct DeleteRollerConfig {
18     #[serde(skip_deserializing)] _p: (),
19 }
20 
21 /// A roller which deletes the log file.
22 #[derive(Debug)]
23 pub struct DeleteRoller(());
24 
25 impl Roll for DeleteRoller {
roll(&self, file: &Path) -> Result<(), Box<Error + Sync + Send>>26     fn roll(&self, file: &Path) -> Result<(), Box<Error + Sync + Send>> {
27         fs::remove_file(file).map_err(Into::into)
28     }
29 }
30 
31 impl DeleteRoller {
32     /// Returns a new `DeleteRoller`.
new() -> DeleteRoller33     pub fn new() -> DeleteRoller {
34         DeleteRoller(())
35     }
36 }
37 
38 /// A deserializer for the `DeleteRoller`.
39 ///
40 /// # Configuration
41 ///
42 /// ```yaml
43 /// kind: delete
44 /// ```
45 #[cfg(feature = "file")]
46 pub struct DeleteRollerDeserializer;
47 
48 #[cfg(feature = "file")]
49 impl Deserialize for DeleteRollerDeserializer {
50     type Trait = Roll;
51 
52     type Config = DeleteRollerConfig;
53 
deserialize( &self, _: DeleteRollerConfig, _: &Deserializers, ) -> Result<Box<Roll>, Box<Error + Sync + Send>>54     fn deserialize(
55         &self,
56         _: DeleteRollerConfig,
57         _: &Deserializers,
58     ) -> Result<Box<Roll>, Box<Error + Sync + Send>> {
59         Ok(Box::new(DeleteRoller::new()))
60     }
61 }
62