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