
Release Notes: - N/A --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com> Co-authored-by: Anthony Eid <hello@anthonyeid.me> Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com> Co-authored-by: Nathan Sobo <nathan@zed.dev> Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
56 lines
2 KiB
Rust
56 lines
2 KiB
Rust
use anyhow::Result;
|
|
|
|
#[cfg(windows)]
|
|
pub fn main(_socket: &str) -> Result<()> {
|
|
// It looks like we can't get an async stdio stream on Windows from smol.
|
|
//
|
|
// We decided to merge this with a panic on Windows since this is only used
|
|
// by the experimental Claude Code Agent Server.
|
|
//
|
|
// We're tracking this internally, and we will address it before shipping the integration.
|
|
panic!("--nc isn't yet supported on Windows");
|
|
}
|
|
|
|
/// The main function for when Zed is running in netcat mode
|
|
#[cfg(not(windows))]
|
|
pub fn main(socket: &str) -> Result<()> {
|
|
use futures::{AsyncReadExt as _, AsyncWriteExt as _, FutureExt as _, io::BufReader, select};
|
|
use net::async_net::UnixStream;
|
|
use smol::{Async, io::AsyncBufReadExt};
|
|
|
|
smol::block_on(async {
|
|
let socket_stream = UnixStream::connect(socket).await?;
|
|
let (socket_read, mut socket_write) = socket_stream.split();
|
|
let mut socket_reader = BufReader::new(socket_read);
|
|
|
|
let mut stdout = Async::new(std::io::stdout())?;
|
|
let stdin = Async::new(std::io::stdin())?;
|
|
let mut stdin_reader = BufReader::new(stdin);
|
|
|
|
let mut socket_line = Vec::new();
|
|
let mut stdin_line = Vec::new();
|
|
|
|
loop {
|
|
select! {
|
|
bytes_read = socket_reader.read_until(b'\n', &mut socket_line).fuse() => {
|
|
if bytes_read? == 0 {
|
|
break
|
|
}
|
|
stdout.write_all(&socket_line).await?;
|
|
stdout.flush().await?;
|
|
socket_line.clear();
|
|
}
|
|
bytes_read = stdin_reader.read_until(b'\n', &mut stdin_line).fuse() => {
|
|
if bytes_read? == 0 {
|
|
break
|
|
}
|
|
socket_write.write_all(&stdin_line).await?;
|
|
socket_write.flush().await?;
|
|
stdin_line.clear();
|
|
}
|
|
}
|
|
}
|
|
|
|
anyhow::Ok(())
|
|
})
|
|
}
|