1use std::fs;
5use std::io;
6use std::os::unix::fs::FileTypeExt;
7
8pub trait FileFIFOExt {
10 fn is_fifo(&self) -> io::Result<bool>;
11}
12
13impl FileFIFOExt for fs::File {
14 fn is_fifo(&self) -> io::Result<bool> {
31 let metadata = self.metadata()?;
32 Ok(metadata.file_type().is_fifo())
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::super::{create, open_read};
39 use super::*;
40 use std::fs;
41
42 #[test]
43 fn is_fifo() {
44 let file_name = "/tmp/a-fifo";
45 create(file_name, None).expect("could not create fifo");
46
47 let file = open_read(file_name).expect("could not open fifo for reading");
48 assert_eq!(file.is_fifo().unwrap(), true);
49
50 fs::remove_file(file_name).expect("could not remove fifo");
51 }
52
53 #[test]
54 fn is_not_fifo() {
55 let file_name = "/tmp/file.txt";
56 fs::write(file_name, b"\n").expect("could not write data to file");
57
58 let file = open_read(file_name).expect("could not open file for reading");
59 assert_eq!(file.is_fifo().unwrap(), false);
60
61 fs::remove_file(file_name).expect("could not remove file");
62 }
63
64}