Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/rmcp/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ url = { version = "2.4", optional = true }
tower-service = { version = "0.3", optional = true }

# for child process transport
process-wrap = { version = "8.2", features = ["tokio1"], optional = true }
process-wrap = { version = "9.0", features = ["tokio1"], optional = true }

# for ws transport
# tokio-tungstenite ={ version = "0.26", optional = true }
Expand Down
20 changes: 10 additions & 10 deletions crates/rmcp/src/transport/child_process.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::process::Stdio;

use futures::future::Future;
use process_wrap::tokio::{TokioChildWrapper, TokioCommandWrap};
use process_wrap::tokio::{ChildWrapper, CommandWrap};
use tokio::{
io::AsyncRead,
process::{ChildStderr, ChildStdin, ChildStdout},
Expand All @@ -13,7 +13,7 @@ use crate::RoleClient;
const MAX_WAIT_ON_DROP_SECS: u64 = 3;
/// The parts of a child process.
type ChildProcessParts = (
Box<dyn TokioChildWrapper>,
Box<dyn ChildWrapper>,
ChildStdout,
ChildStdin,
Option<ChildStderr>,
Expand All @@ -23,7 +23,7 @@ type ChildProcessParts = (
/// Returns `(child, stdout, stdin, stderr)` where `stderr` is `Some` only
/// if the process was spawned with `Stdio::piped()`.
#[inline]
fn child_process(mut child: Box<dyn TokioChildWrapper>) -> std::io::Result<ChildProcessParts> {
fn child_process(mut child: Box<dyn ChildWrapper>) -> std::io::Result<ChildProcessParts> {
let child_stdin = match child.inner_mut().stdin().take() {
Some(stdin) => stdin,
None => return Err(std::io::Error::other("stdin was already taken")),
Expand All @@ -42,7 +42,7 @@ pub struct TokioChildProcess {
}

pub struct ChildWithCleanup {
inner: Option<Box<dyn TokioChildWrapper>>,
inner: Option<Box<dyn ChildWrapper>>,
}

impl Drop for ChildWithCleanup {
Expand Down Expand Up @@ -87,13 +87,13 @@ impl AsyncRead for TokioChildProcessOut {

impl TokioChildProcess {
/// Convenience: spawn with default `piped` stdio
pub fn new(command: impl Into<TokioCommandWrap>) -> std::io::Result<Self> {
pub fn new(command: impl Into<CommandWrap>) -> std::io::Result<Self> {
let (proc, _ignored) = TokioChildProcessBuilder::new(command).spawn()?;
Ok(proc)
}

/// Builder entry-point allowing fine-grained stdio control.
pub fn builder(command: impl Into<TokioCommandWrap>) -> TokioChildProcessBuilder {
pub fn builder(command: impl Into<CommandWrap>) -> TokioChildProcessBuilder {
TokioChildProcessBuilder::new(command)
}

Expand All @@ -111,7 +111,7 @@ impl TokioChildProcess {
if let Some(mut child) = self.child.inner.take() {
self.transport.close().await?;

let wait_fut = Box::into_pin(child.wait());
let wait_fut = child.wait();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wait() now returns Pin<Box<dyn Future>> so it can be awaited directly

tokio::select! {
_ = tokio::time::sleep(std::time::Duration::from_secs(MAX_WAIT_ON_DROP_SECS)) => {
if let Err(e) = Box::into_pin(child.kill()).await {
Expand All @@ -136,7 +136,7 @@ impl TokioChildProcess {
}

/// Take ownership of the inner child process
pub fn into_inner(mut self) -> Option<Box<dyn TokioChildWrapper>> {
pub fn into_inner(mut self) -> Option<Box<dyn ChildWrapper>> {
self.child.inner.take()
}

Expand All @@ -152,14 +152,14 @@ impl TokioChildProcess {

/// Builder for `TokioChildProcess` allowing custom `Stdio` configuration.
pub struct TokioChildProcessBuilder {
cmd: TokioCommandWrap,
cmd: CommandWrap,
stdin: Stdio,
stdout: Stdio,
stderr: Stdio,
}

impl TokioChildProcessBuilder {
fn new(cmd: impl Into<TokioCommandWrap>) -> Self {
fn new(cmd: impl Into<CommandWrap>) -> Self {
Self {
cmd: cmd.into(),
stdin: Stdio::piped(),
Expand Down