1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
use std::path; /// Access paths within [`TempDir`] for testing. /// /// See [`ChildPath`] trait implementations. /// /// ```rust /// use assert_fs::prelude::*; /// /// let temp = assert_fs::TempDir::new().unwrap(); /// let input_file = temp.child("foo.txt"); /// input_file.touch().unwrap(); /// temp.close().unwrap(); /// ``` /// /// [`TempDir`]: struct.TempDir.html /// [`ChildPath`]: struct.ChildPath.html pub trait PathChild { /// Access a path within the temp directory. /// /// # Examples /// /// ```rust /// use assert_fs::prelude::*; /// /// let temp = assert_fs::TempDir::new().unwrap(); /// println!("{}", temp.path().display()); /// println!("{}", temp.child("foo/bar.txt").path().display()); /// temp.close().unwrap(); /// ``` fn child<P>(&self, path: P) -> ChildPath where P: AsRef<path::Path>; } impl PathChild for super::TempDir { fn child<P>(&self, path: P) -> ChildPath where P: AsRef<path::Path>, { ChildPath::new(self.path().join(path.as_ref())) } } impl PathChild for ChildPath { fn child<P>(&self, path: P) -> ChildPath where P: AsRef<path::Path>, { ChildPath::new(self.path().join(path.as_ref())) } } /// A path within a [`TempDir`] /// /// See Trait Implementations. /// /// # Examples /// /// ```rust /// use assert_fs::prelude::*; /// /// let temp = assert_fs::TempDir::new().unwrap(); /// /// let input_file = temp.child("foo.txt"); /// input_file.touch().unwrap(); /// /// temp.child("bar.txt").touch().unwrap(); /// /// temp.close().unwrap(); /// ``` /// /// [`TempDir`]: struct.TempDir.html pub struct ChildPath { path: path::PathBuf, } impl ChildPath { /// Wrap a path for use with extension traits. /// /// See trait implementations or [`PathChild`] for more details. /// /// [`PathChild`]: trait.PathChild.html pub fn new<P>(path: P) -> Self where P: Into<path::PathBuf>, { Self { path: path.into() } } /// Access the path. pub fn path(&self) -> &path::Path { &self.path } }