From 3881362830012ee6408b6b2b7799a07e8230badf Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Thu, 24 Oct 2019 15:25:25 -0400 Subject: metadata --- Cargo.toml | 7 +++++++ LICENSE | 32 ++++++++++++++++++++++++++++++++ README.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 3 +++ 4 files changed, 97 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/Cargo.toml b/Cargo.toml index 1d7e7d3..8bc303c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,13 @@ version = "0.1.0" authors = ["Jesse Luehrs "] edition = "2018" +description = "wraps tokio-pty-process in order to provide a simpler API as a single stream object" +license = "MIT" +repository = "https://git.tozt.net/tokio-pty-process-stream" +readme = "README.md" +keywords = ["pty", "futures"] +categories = ["asynchronous"] + [dependencies] component-future = "0.1" futures = "0.1" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..fda0fd2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,32 @@ +This software is Copyright (c) 2019 by Jesse Luehrs. + +This is free software, licensed under: + + The MIT (X11) License + +The MIT License + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT +WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..9770430 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# tokio-pty-process-stream + +This crate wraps `tokio-pty-process` in order to provide a simpler API as +a single stream object. + +## Overview + +When you need to interact with an interactive program as part of an +asynchronous application, it can be tricky to figure out the way to +structure the different parts that are required. This crate simplifies the +API down to just providing the input via an `AsyncRead` object, and then +getting updates about what the program is doing via results generated by a +stream. + +## Synopsis + +This is an example of how to run an interactive program and have it behave +identically to running it in the shell. Note that we have to use our own +`Stdin` implementation here because `tokio::io::stdin()` is actually +blocking, and so polling it as part of an interactive application doesn't +work correctly. The implementation of `Stdin` is elided here, but you can +see the full implementation in `examples/shell.rs` in the repository. + +```rust +let mut argv = std::env::args(); +argv.next().unwrap(); +let cmd = argv.next().unwrap(); +let args: Vec<_> = argv.collect(); + +let process = + tokio_pty_process_stream::Process::new(&cmd, &args, Stdin::new()); + +let _raw = crossterm::RawScreen::into_raw_mode().unwrap(); +tokio::run( + process + .for_each(|ev| { + match ev { + tokio_pty_process_stream::Event::CommandStart { + .. + } => {} + tokio_pty_process_stream::Event::Output { data } => { + let stdout = std::io::stdout(); + let mut stdout = stdout.lock(); + stdout.write_all(&data).unwrap(); + stdout.flush().unwrap(); + } + tokio_pty_process_stream::Event::CommandExit { + .. + } => {} + } + futures::future::ok(()) + }) + .map_err(|e| panic!(e)), +); +``` diff --git a/src/lib.rs b/src/lib.rs index 2e21f01..630ebd1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -138,9 +138,12 @@ //! # } //! ``` +// XXX this is broken with ale +// #![warn(clippy::cargo)] #![warn(clippy::pedantic)] #![warn(clippy::nursery)] #![allow(clippy::missing_const_for_fn)] +#![allow(clippy::multiple_crate_versions)] #![allow(clippy::type_complexity)] use futures::future::Future as _; -- cgit v1.2.3