diff options
Diffstat (limited to 'examples/logs.rs')
-rw-r--r-- | examples/logs.rs | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/examples/logs.rs b/examples/logs.rs index 18e68d0..b35b0a3 100644 --- a/examples/logs.rs +++ b/examples/logs.rs @@ -1,16 +1,27 @@ extern crate shiplift; +extern crate tokio; -use shiplift::{Docker, LogsOptions}; +use shiplift::{tty::StreamType, Docker, LogsOptions}; use std::env; +use tokio::prelude::{Future, Stream}; fn main() { let docker = Docker::new(); - if let Some(id) = env::args().nth(1) { - let mut logs = docker - .containers() - .get(&id) - .logs(&LogsOptions::builder().stdout(true).build()) - .unwrap(); - std::io::copy(&mut logs, &mut std::io::stdout()).unwrap(); - } + let id = env::args() + .nth(1) + .expect("You need to specify a container id"); + let fut = docker + .containers() + .get(&id) + .logs(&LogsOptions::builder().stdout(true).stderr(true).build()) + .for_each(|line| { + match line.stream_type { + StreamType::StdOut => println!("Stdout: {}", line.data), + StreamType::StdErr => eprintln!("Stderr: {}", line.data), + } + Ok(()) + }) + .map_err(|e| eprintln!("Error: {}", e)); + + tokio::run(fut); } |