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}