1//! io-lifetimes provides safe, portable, and convenient conversions from types 2//! implementing `IntoFilelike` and `FromSocketlike` to types implementing 3//! `FromFilelike` and `IntoSocketlike`, respectively. 4 5use io_lifetimes::FromFilelike; 6use std::fs::File; 7use std::io::{self, Read}; 8use std::process::{Command, Stdio}; 9 10fn main() -> io::Result<()> { 11 let mut child = Command::new("cargo") 12 .arg("--help") 13 .stdout(Stdio::piped()) 14 .spawn() 15 .expect("failed to execute child"); 16 17 // Convert from `ChildStderr` into `File` without any platform-specific 18 // code or `unsafe`! 19 let mut file = File::from_into_filelike(child.stdout.take().unwrap()); 20 21 // Well, this example is not actually that cool, because `File` doesn't let 22 // you do anything that you couldn't already do with `ChildStderr` etc., but 23 // it's useful outside of standard library types. 24 let mut buffer = String::new(); 25 file.read_to_string(&mut buffer)?; 26 27 Ok(()) 28} 29