file_access/
as_file.rs

1use crate::*;
2
3pub trait AsFile {
4    fn as_file(&self) -> FilePath;
5}
6
7impl<Path: AsRef<str>> AsFile for Path {
8    /// Converts an `AsRef<str>`, such as `String` or `&str`, into a `FilePath`.
9    ///
10    /// # Examples
11    /// ```
12    /// use file_access::AsFile;
13    ///
14    /// fn main() -> std::io::Result<()> {
15    ///     Ok({
16    ///         "as_file.1".as_file().write_string(&"Hello, World!")?;
17    ///
18    ///         let file = "as_file.1".as_file();
19    ///         file.append_lines(&vec!["hello", "world"])?;
20    ///         file.copy_to(&"as_file.2")?; // copies ./as_file.1 to ./as_file.2
21    ///
22    ///         "as_file.2".as_file().rename_to(&"as_file.1")?; // replace
23    ///         "as_file.1".as_file().delete()?; // clean-up
24    ///     })
25    /// }
26    /// ```
27    fn as_file(&self) -> FilePath {
28        FilePath::access(self)
29    }
30}
31
32#[cfg(test)]
33mod tests {
34    use super::*;
35    use std::io::Result;
36
37    #[test]
38    fn str_as_file() -> Result<()> {
39        Ok({
40            let text = "Cargo.toml".as_file().read_string()?;
41            assert_ne!(text.len(), 0, "Cargo.toml shouldn't be empty");
42        })
43    }
44
45    #[test]
46    fn string_as_file() -> Result<()> {
47        Ok({
48            // Arrange
49            let lines = vec!["hello", "world"]; // .to_vec_string();
50
51            // Action
52            let file = "from_string.txt".to_string().as_file();
53            file.write_lines(&lines)?;
54
55            // Assert
56            assert_eq!(file.read_lines()?, lines);
57
58            // Clean-up
59            file.delete()?;
60        })
61    }
62}