fsio/lib.rs
1#![deny(
2 future_incompatible,
3 keyword_idents,
4 let_underscore,
5 nonstandard_style,
6 unused
7)]
8#![warn(unknown_lints)]
9
10//! # fsio
11//!
12//! File System and Path utility functions.
13//!
14//! # Usage
15//!
16//! There are multiple main modules for fsio:
17//!
18//! * fsio::path - Holds path related functions and traits. They do not directly modify the file system.
19//! * fsio::file - File utility functions such as read_file, write_file, ...
20//! * fsio::directory - Directory specific utility functions.
21//!
22//! ### Examples
23//!
24//! ```rust
25//! use fsio::{directory, file, path};
26//! use std::fs::File;
27//! use std::io::Write;
28//! use std::path::Path;
29//! use std::str;
30//!
31//! fn main() {
32//! // file operations
33//! let mut result = file::ensure_exists("./target/__test/doc/example/file_test/dir1/dir2/file.txt");
34//! assert!(result.is_ok());
35//!
36//! // create/append and read text files
37//! let mut file_path = "./target/__test/example/doc/file_test/append_text_file/file.txt";
38//! result = file::write_text_file(file_path, "some content");
39//! assert!(result.is_ok());
40//! result = file::append_text_file(file_path, "\nmore content");
41//! assert!(result.is_ok());
42//! let mut text = file::read_text_file(file_path).unwrap();
43//! assert_eq!(text, "some content\nmore content");
44//!
45//! // create/append and read binary files
46//! file_path = "./target/__test/example/doc/file_test/append_and_read_file_test/file.txt";
47//! result = file::write_file(file_path, "some content".as_bytes());
48//! assert!(result.is_ok());
49//! result = file::append_file(file_path, "\nmore content".as_bytes());
50//! assert!(result.is_ok());
51//! let data = file::read_file(file_path).unwrap();
52//! assert_eq!(str::from_utf8(&data).unwrap(), "some content\nmore content");
53//!
54//! // custom writing
55//! file_path = "./target/__test/example/doc/file_test/modify_file/file.txt";
56//! result = file::modify_file(
57//! file_path,
58//! &move |file: &mut File| file.write_all("some content".as_bytes()),
59//! false,
60//! );
61//! assert!(result.is_ok());
62//! text = file::read_text_file(file_path).unwrap();
63//! assert_eq!(text, "some content");
64//!
65//! // delete file
66//! result = file::delete(file_path);
67//! assert!(result.is_ok());
68//!
69//! // directory operations
70//! result = directory::create("./target/__test/example/doc/directory_test/dir1/dir2");
71//! assert!(result.is_ok());
72//!
73//! result = directory::create_parent("./target/__test/example/doc/directory_test/dir1/files/file.txt");
74//! assert!(result.is_ok());
75//!
76//! // delete directory
77//! result = directory::delete("./target/__test/example/doc/directory_test");
78//! assert!(result.is_ok());
79//!
80//! // basename and parent directory examples
81//! let basename = path::get_basename("./src/path/mod.rs");
82//! assert_eq!(basename.unwrap(), "mod.rs");
83//!
84//! let dirname = path::get_parent_directory("./src/path/mod.rs");
85//! assert_eq!(dirname.unwrap(), "./src/path");
86//!
87//! // canonicalize examples
88//! let path_obj = Path::new("./src/path/mod.rs");
89//!
90//! let path1 = path::canonicalize_as_string(&path_obj);
91//! let path2 = path::canonicalize_or("./src/path/mod.rs", "/src/path/mod.rs");
92//!
93//! assert_eq!(path1.unwrap(), path2);
94//! }
95//! ```
96//!
97//! # Installation
98//! In order to use this library, just add it as a dependency:
99//!
100//! ```ini
101//! [dependencies]
102//! fsio = "*"
103//! ```
104//!
105//! If you need access to temporary file paths, enable the **temp-path** feature as follows:
106//!
107//! ```ini
108//! [dependencies]
109//! fsio = { version = "*", features = ["temp-path"] }
110//! ```
111//!
112//! # Contributing
113//! See [contributing guide](https://github.com/sagiegurari/fsio/blob/master/.github/CONTRIBUTING.md)
114//!
115//! # License
116//! Developed by Sagie Gur-Ari and licensed under the
117//! [Apache 2](https://github.com/sagiegurari/fsio/blob/master/LICENSE) open source license.
118//!
119
120#[cfg(test)]
121use doc_comment as _;
122
123#[cfg(doctest)]
124doc_comment::doctest!("../README.md");
125
126pub mod directory;
127pub mod error;
128pub mod file;
129pub mod path;
130pub mod types;