//! io-lifetimes provides safe, portable, and convenient conversions from types //! implementing `IntoFilelike` and `FromSocketlike` to types implementing //! `FromFilelike` and `IntoSocketlike`, respectively. #![cfg_attr(io_lifetimes_use_std, feature(io_safety))] use io_lifetimes::FromFilelike; use std::fs::File; use std::io::{self, Read}; use std::process::{Command, Stdio}; fn main() -> io::Result<()> { let mut child = Command::new("cargo") .arg("--help") .stdout(Stdio::piped()) .spawn() .expect("failed to execute child"); // Convert from `ChildStderr` into `File` without any platform-specific // code or `unsafe`! let mut file = File::from_into_filelike(child.stdout.take().unwrap()); // Well, this example is not actually that cool, because `File` doesn't let // you do anything that you couldn't already do with `ChildStderr` etc., but // it's useful outside of standard library types. let mut buffer = String::new(); file.read_to_string(&mut buffer)?; Ok(()) }