1 use crate::errors::{Error, ErrorKind}; 2 use std::io; 3 use std::path::Path; 4 5 /// A builder for creating directories in various manners. 6 /// 7 /// This is a wrapper around [`tokio::fs::DirBuilder`]. 8 #[derive(Debug, Default)] 9 #[cfg_attr(docsrs, doc(cfg(feature = "tokio")))] 10 pub struct DirBuilder { 11 inner: tokio::fs::DirBuilder, 12 } 13 14 impl DirBuilder { 15 /// Creates a new set of options with default mode/security settings for all 16 /// platforms and also non-recursive. 17 /// 18 /// This is a wrapper version of [`tokio::fs::DirBuilder::new`] 19 /// 20 /// # Examples 21 /// 22 /// ```no_run 23 /// use fs_err::tokio::DirBuilder; 24 /// 25 /// let builder = DirBuilder::new(); 26 /// ``` new() -> Self27 pub fn new() -> Self { 28 Default::default() 29 } 30 31 /// Indicates whether to create directories recursively (including all parent 32 /// directories). Parents that do not exist are created with the same security and 33 /// permissions settings. 34 /// 35 /// Wrapper around [`tokio::fs::DirBuilder::recursive`]. recursive(&mut self, recursive: bool) -> &mut Self36 pub fn recursive(&mut self, recursive: bool) -> &mut Self { 37 self.inner.recursive(recursive); 38 self 39 } 40 41 /// Creates the specified directory with the configured options. 42 /// 43 /// Wrapper around [`tokio::fs::DirBuilder::create`]. create(&self, path: impl AsRef<Path>) -> io::Result<()>44 pub async fn create(&self, path: impl AsRef<Path>) -> io::Result<()> { 45 let path = path.as_ref(); 46 self.inner 47 .create(path) 48 .await 49 .map_err(|err| Error::build(err, ErrorKind::CreateDir, path)) 50 } 51 } 52 53 #[cfg(unix)] 54 impl DirBuilder { 55 /// Sets the mode to create new directories with. 56 /// 57 /// Wrapper around [`tokio::fs::DirBuilder::mode`]. mode(&mut self, mode: u32) -> &mut Self58 pub fn mode(&mut self, mode: u32) -> &mut Self { 59 self.inner.mode(mode); 60 self 61 } 62 } 63