summaryrefslogtreecommitdiffstats
path: root/examples/logs.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/logs.rs')
-rw-r--r--examples/logs.rs29
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);
}