Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

monoio支持h1的with_upgrades出现异常 #331

Open
xj524598 opened this issue Feb 2, 2025 · 4 comments
Open

monoio支持h1的with_upgrades出现异常 #331

xj524598 opened this issue Feb 2, 2025 · 4 comments

Comments

@xj524598
Copy link

xj524598 commented Feb 2, 2025

代码如下:

//! HTTP server example with hyper in poll-io mode.
//!
//! After running this example, you can open http://localhost:23300
//! and http://localhost:23300/monoio in your browser or curl it.

use std::net::SocketAddr;

use bytes::Bytes;
use futures::Future;
use hyper::{server::conn::http1, service::service_fn};
use monoio::{io::IntoPollIo, net::TcpListener};

pub(crate) async fn serve_http<S, F, E, A>(addr: A, service: S) -> std::io::Result<()>
where
S: Copy + Fn(Requesthyper::body::Incoming) -> F + 'static,
F: Future<Output = Result<Response<Full>, E>> + 'static,
E: std::error::Error + 'static + Send + Sync,
A: Into,
{
let listener = TcpListener::bind(addr.into())?;
loop {
let (stream, _) = listener.accept().await?;
let stream_poll = monoio_compat::hyper::MonoioIo::new(stream.into_poll_io()?);
monoio::spawn(async move {
// Handle the connection from the client using HTTP1 and pass any
// HTTP requests received on that connection to the hello function
if let Err(err) = http1::Builder::new()
.timer(monoio_compat::hyper::MonoioTimer)
.serve_connection(stream_poll, service_fn(service))
.with_upgrades()
.await
{
println!("Error serving connection: {:?}", err);
}
});
}
}

use http_body_util::Full;
use hyper::{Method, Request, Response, StatusCode};

async fn hyper_handler(
req: Requesthyper::body::Incoming,
) -> Result<Response<Full>, std::convert::Infallible> {
match (req.method(), req.uri().path()) {
(&Method::GET, "/") => Ok(Response::new(Full::new(Bytes::from("Hello World!")))),
(&Method::GET, "/monoio") => Ok(Response::new(Full::new(Bytes::from("Hello Monoio!")))),
_ => Ok(Response::builder()
.status(StatusCode::NOT_FOUND)
.body(Full::new(Bytes::from("404 not found")))
.unwrap()),
}
}

#[monoio::main(threads = 2, timer_enabled = true)]
async fn main() {
println!("Running http server on 0.0.0.0:23300");
let _ = serve_http(([0, 0, 0, 0], 23300), hyper_handler).await;
println!("Http server stopped");
}

错误如下:

error[E0277]: Rc<monoio::driver::shared_fd::Inner> cannot be sent between threads safely
--> src/main.rs:30:18
|
30 | .with_upgrades()
| ^^^^^^^^^^^^^ Rc<monoio::driver::shared_fd::Inner> cannot be sent between threads safely
|
= help: within MonoioIo<TcpStreamPoll>, the trait std::marker::Send is not implemented for Rc<monoio::driver::shared_fd::Inner>, which is required by MonoioIo<TcpStreamPoll>: std::marker::Send
note: required because it appears within the type monoio::driver::shared_fd::SharedFd
--> /Users/10010268/.cargo/registry/src/index.crates.io-6f17d22bba15001f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
|
16 | pub(crate) struct SharedFd {
| ^^^^^^^^
note: required because it appears within the type monoio::net::TcpStream
--> /Users/10010268/.cargo/registry/src/index.crates.io-6f17d22bba15001f/monoio-0.2.4/src/net/tcp/stream.rs:70:12
|
70 | pub struct TcpStream {
| ^^^^^^^^^
note: required because it appears within the type TcpStreamPoll
--> /Users/10010268/.cargo/registry/src/index.crates.io-6f17d22bba15001f/monoio-0.2.4/src/net/tcp/stream_poll.rs:23:12
|
23 | pub struct TcpStreamPoll(TcpStream);
| ^^^^^^^^^^^^^
note: required because it appears within the type MonoioIo<TcpStreamPoll>
--> /Users/10010268/.cargo/registry/src/index.crates.io-6f17d22bba15001f/monoio-compat-0.2.2/src/hyper.rs:80:16
|
80 | pub struct MonoioIo {
| ^^^^^^^^
note: required by a bound in hyper::server::conn::http1::Connection::<I, S>::with_upgrades
--> /Users/10010268/.cargo/registry/src/index.crates.io-6f17d22bba15001f/hyper-1.6.0/src/server/conn/http1.rs:193:12
|
191 | pub fn with_upgrades(self) -> UpgradeableConnection<I, S>
| ------------- required by a bound in this associated function
192 | where
193 | I: Send,
| ^^^^ required by this bound in Connection::<I, S>::with_upgrades
help: consider removing this method call, as the receiver has type &mut hyper::server::conn::http1::Builder and &mut hyper::server::conn::http1::Builder: std::marker::Send trivially holds
|
28 - .timer(monoio_compat::hyper::MonoioTimer)
29 - .serve_connection(stream_poll, service_fn(service))
28 + .timer(monoio_compat::hyper::MonoioTimer)
|

@ihciah
Copy link
Member

ihciah commented Feb 5, 2025

这个问题出在 hyper 对于 upgrade 的更严格的要求上。
我个人认为这个 Send 约束理论上可能是不必要的,这可能和其内部设计有关。

@Eclextic
Copy link

Eclextic commented Mar 4, 2025

While I do not speak chinese, I have translated some stuff and totally agree. I kind of actually need this, because I am working with hyper as well. I know I might sound a little ungrateful, but please let this be the first thing, that is fixed.

Tokio has fucked multiple other APIs and polluted them sadly, and it is left to the library developers to adapt and fix tokio's shit.

@Eclextic
Copy link

Eclextic commented Mar 4, 2025

Specifically with this code and error:

I am using smol_hyper here to get the code to at least compile and error at the correct spot so we can find the source of the problem.

Even when using monoio_compat, we still get some issues with what the original poster mentioned: Send and Sync not being upheld correctly.

    let channel = Endpoint::from_shared(uri)?
        .connect_timeout(Duration::from_millis(500))
        .connect_with_connector(service_fn(|uri: Uri| async move {
            let path = strip_scheme_from_uri(uri);
            loop {
                dbg!("Is this running?");
                match monoio::net::UnixStream::connect(&path).await {
                    Ok(stream) => {
                        // monoio_compat::UnixStreamCompat::new(stream);
                        return Ok::<_, io::Error>(smol_hyper::rt::FuturesIo::new(stream));
                        // return Ok::<_, io::Error>(smol_hyper::rt::FuturesIo::new(stream));
                    },
                    _ => thread::sleep(Duration::from_millis(1)),
                };
            }
        }))
        .compat()
        .await?;
Error

error[E0277]: the trait bound `UnixStream: AsyncRead` is not satisfied
   --> plugin/src/startup.rs:56:33
    |
56  |           .connect_with_connector(service_fn(|uri: Uri| async move {
    |  __________----------------------_^
    | |          |
    | |          required by a bound introduced by this call
57  | |             let path = strip_scheme_from_uri(uri);
58  | |             loop {
59  | |                 dbg!("Is this running?");
...   |
69  | |         }))
    | |__________^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncRead` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncRead`:
              &Async<T>
              &[u8]
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
            and 26 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Read`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:22
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                      ^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14013731323564180581.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: the trait bound `UnixStream: AsyncWrite` is not satisfied
   --> plugin/src/startup.rs:56:33
    |
56  |           .connect_with_connector(service_fn(|uri: Uri| async move {
    |  __________----------------------_^
    | |          |
    | |          required by a bound introduced by this call
57  | |             let path = strip_scheme_from_uri(uri);
58  | |             loop {
59  | |                 dbg!("Is this running?");
...   |
69  | |         }))
    | |__________^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncWrite` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncWrite`:
              &Async<T>
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
              IntoAsyncRead<St>
            and 25 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Write`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:33
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                 ^^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-6676119642668662713.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
   --> plugin/src/startup.rs:56:33
    |
56  |           .connect_with_connector(service_fn(|uri: Uri| async move {
    |  __________----------------------_^
    | |          |
    | |          required by a bound introduced by this call
57  | |             let path = strip_scheme_from_uri(uri);
58  | |             loop {
59  | |                 dbg!("Is this running?");
...   |
69  | |         }))
    | |__________^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    |
    = help: within `FuturesIo<UnixStream>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
    |
16  | pub(crate) struct SharedFd {
    |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
    |
25  | pub struct UnixStream {
    |            ^^^^^^^^^^
note: required because it appears within the type `FuturesIo<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smol-hyper-0.1.1/src/rt/futures.rs:15:16
    |
15  |     pub struct FuturesIo<T: ?Sized> {
    |                ^^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-1979345431529525240.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: the trait bound `UnixStream: AsyncRead` is not satisfied
   --> plugin/src/startup.rs:54:19
    |
54  |       let channel = Endpoint::from_shared(uri)?
    |  ___________________^
55  | |         .connect_timeout(Duration::from_millis(500))
56  | |         .connect_with_connector(service_fn(|uri: Uri| async move {
57  | |             let path = strip_scheme_from_uri(uri);
...   |
69  | |         }))
70  | |         .compat()
    | |_________________^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncRead` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncRead`:
              &Async<T>
              &[u8]
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
            and 26 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Read`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:22
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                      ^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14013731323564180581.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: the trait bound `UnixStream: AsyncWrite` is not satisfied
   --> plugin/src/startup.rs:54:19
    |
54  |       let channel = Endpoint::from_shared(uri)?
    |  ___________________^
55  | |         .connect_timeout(Duration::from_millis(500))
56  | |         .connect_with_connector(service_fn(|uri: Uri| async move {
57  | |             let path = strip_scheme_from_uri(uri);
...   |
69  | |         }))
70  | |         .compat()
    | |_________________^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncWrite` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncWrite`:
              &Async<T>
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
              IntoAsyncRead<St>
            and 25 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Write`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:33
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                 ^^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-6676119642668662713.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
   --> plugin/src/startup.rs:54:19
    |
54  |       let channel = Endpoint::from_shared(uri)?
    |  ___________________^
55  | |         .connect_timeout(Duration::from_millis(500))
56  | |         .connect_with_connector(service_fn(|uri: Uri| async move {
57  | |             let path = strip_scheme_from_uri(uri);
...   |
69  | |         }))
70  | |         .compat()
    | |_________________^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    |
    = help: within `FuturesIo<UnixStream>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
    |
16  | pub(crate) struct SharedFd {
    |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
    |
25  | pub struct UnixStream {
    |            ^^^^^^^^^^
note: required because it appears within the type `FuturesIo<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smol-hyper-0.1.1/src/rt/futures.rs:15:16
    |
15  |     pub struct FuturesIo<T: ?Sized> {
    |                ^^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-1979345431529525240.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: the trait bound `UnixStream: AsyncRead` is not satisfied
   --> plugin/src/startup.rs:71:10
    |
71  |         .await?;
    |          ^^^^^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncRead` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncRead`:
              &Async<T>
              &[u8]
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
            and 26 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Read`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:22
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                      ^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14013731323564180581.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: the trait bound `UnixStream: AsyncWrite` is not satisfied
   --> plugin/src/startup.rs:71:10
    |
71  |         .await?;
    |          ^^^^^ unsatisfied trait bound
    |
    = help: the trait `futures::AsyncWrite` is not implemented for `common::reexports::monoio::net::UnixStream`
    = help: the following other types implement trait `futures::AsyncWrite`:
              &Async<T>
              &mut T
              AllowStdIo<T>
              AssertAsync<T>
              Async<T>
              Box<T>
              Compat<T>
              IntoAsyncRead<St>
            and 25 others
    = note: required for `FuturesIo<UnixStream>` to implement `hyper::rt::io::Write`
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:33
    |
364 |     pub async fn connect_with_connector<C>(&self, connector: C) ->...
    |                  ---------------------- required by a bound in this associated function
...
367 |         C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                 ^^^^^^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-6676119642668662713.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
   --> plugin/src/startup.rs:71:10
    |
71  |         .await?;
    |          ^^^^^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    |
    = help: within `FuturesIo<UnixStream>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
    |
16  | pub(crate) struct SharedFd {
    |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
    |
25  | pub struct UnixStream {
    |            ^^^^^^^^^^
note: required because it appears within the type `FuturesIo<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/smol-hyper-0.1.1/src/rt/futures.rs:15:16
    |
15  |     pub struct FuturesIo<T: ?Sized> {
    |                ^^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-1979345431529525240.txt'
    = note: consider using `--verbose` to print the full type name to the console

@Eclextic
Copy link

Eclextic commented Mar 4, 2025

Here it is with the correct compat implementations:

    let channel = Endpoint::from_shared(uri)?
        .connect_timeout(Duration::from_millis(500))
        .connect_with_connector(service_fn(|uri: Uri| async move {
            let path = strip_scheme_from_uri(uri);
            loop {
                dbg!("Is this running?");
                match monoio::net::UnixStream::connect(&path).await {
                    Ok(stream) => {
                        // monoio_compat::UnixStreamCompat::new(stream);
                        return Ok::<_, io::Error>(monoio_compat::hyper::MonoioIo::new(monoio_compat::UnixStreamCompat::new(
                            stream,
                        )));
                        // return Ok::<_, io::Error>(smol_hyper::rt::FuturesIo::new(stream));
                    },
                    _ => thread::sleep(Duration::from_millis(1)),
                };
            }
        }))
        .await?;

Details

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:54:33
    |
54  |           .connect_with_connector(service_fn(|uri: Uri| async move {
    |  __________----------------------_^
    | |          |
    | |          required by a bound introduced by this call
55  | |             let path = strip_scheme_from_uri(uri);
56  | |             loop {
57  | |                 dbg!("Is this running?");
...   |
69  | |         }))
    | |__________^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:54:33
    |
54  |           .connect_with_connector(service_fn(|uri: Uri| async move {
    |  __________----------------------_^
    | |          |
    | |          required by a bound introduced by this call
55  | |             let path = strip_scheme_from_uri(uri);
56  | |             loop {
57  | |                 dbg!("Is this running?");
...   |
69  | |         }))
    | |__________^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<...>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<Result<(), std::io::Error>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    --> plugin/src/startup.rs:54:33
     |
54   |           .connect_with_connector(service_fn(|uri: Uri| async move {
     |  __________----------------------_^
     | |          |
     | |          required by a bound introduced by this call
55   | |             let path = strip_scheme_from_uri(uri);
56   | |             loop {
57   | |                 dbg!("Is this running?");
...    |
69   | |         }))
     | |__________^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
     |
     = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
     |
16   | pub(crate) struct SharedFd {
     |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
     |
25   | pub struct UnixStream {
     |            ^^^^^^^^^^
note: required because it appears within the type `UnsafeCell<UnixStream>`
    --> /home/tangerine-dev/.local/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cell.rs:2075:12
     |
2075 | pub struct UnsafeCell<T: ?Sized> {
     |            ^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
     |
14   | pub struct StreamWrapper<T> {
     |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
     |
80   |     pub struct MonoioIo<T> {
     |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
     |
364  | ...pub async fn connect_with_connector<C>(&self, connector: C) ->...
     |                 ---------------------- required by a bound in this associated function
...
367  | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
     |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
     = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
     = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:52:19
    |
52  |       let channel = Endpoint::from_shared(uri)?
    |  ___________________^
53  | |         .connect_timeout(Duration::from_millis(500))
54  | |         .connect_with_connector(service_fn(|uri: Uri| async move {
55  | |             let path = strip_scheme_from_uri(uri);
...   |
69  | |         }))
    | |___________^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:52:19
    |
52  |       let channel = Endpoint::from_shared(uri)?
    |  ___________________^
53  | |         .connect_timeout(Duration::from_millis(500))
54  | |         .connect_with_connector(service_fn(|uri: Uri| async move {
55  | |             let path = strip_scheme_from_uri(uri);
...   |
69  | |         }))
    | |___________^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<...>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<Result<(), std::io::Error>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    --> plugin/src/startup.rs:52:19
     |
52   |       let channel = Endpoint::from_shared(uri)?
     |  ___________________^
53   | |         .connect_timeout(Duration::from_millis(500))
54   | |         .connect_with_connector(service_fn(|uri: Uri| async move {
55   | |             let path = strip_scheme_from_uri(uri);
...    |
69   | |         }))
     | |___________^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
     |
     = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
     |
16   | pub(crate) struct SharedFd {
     |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
     |
25   | pub struct UnixStream {
     |            ^^^^^^^^^^
note: required because it appears within the type `UnsafeCell<UnixStream>`
    --> /home/tangerine-dev/.local/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cell.rs:2075:12
     |
2075 | pub struct UnsafeCell<T: ?Sized> {
     |            ^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
     |
14   | pub struct StreamWrapper<T> {
     |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
     |
80   |     pub struct MonoioIo<T> {
     |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
     |
364  | ...pub async fn connect_with_connector<C>(&self, connector: C) ->...
     |                 ---------------------- required by a bound in this associated function
...
367  | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
     |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
     = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
     = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:70:10
    |
70  |         .await?;
    |          ^^^^^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<(..., ...)>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
   --> plugin/src/startup.rs:70:10
    |
70  |         .await?;
    |          ^^^^^ `NonNull<dyn Future<Output = ...>>` cannot be sent between threads safely
    |
    = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `NonNull<dyn Future<Output = ...>>`
note: required because it appears within the type `ReusableLocalBoxFuture<...>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/reusable-box-future-0.2.0/src/local_box_future.rs:14:12
    |
14  | pub struct ReusableLocalBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `MaybeArmedBoxFuture<Result<(), std::io::Error>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/box_future.rs:9:12
    |
9   | pub struct MaybeArmedBoxFuture<T> {
    |            ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
    |
14  | pub struct StreamWrapper<T> {
    |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
    |
80  |     pub struct MonoioIo<T> {
    |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
   --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
    |
364 | ...pub async fn connect_with_connector<C>(&self, connector: C) -> ...
    |                 ---------------------- required by a bound in this associated function
...
367 | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
    |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
    = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
    = note: consider using `--verbose` to print the full type name to the console

error[E0277]: `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
    --> plugin/src/startup.rs:70:10
     |
70   |         .await?;
     |          ^^^^^ `Rc<monoio::driver::shared_fd::Inner>` cannot be sent between threads safely
     |
     = help: within `MonoioIo<StreamWrapper<UnixStream>>`, the trait `std::marker::Send` is not implemented for `Rc<monoio::driver::shared_fd::Inner>`
note: required because it appears within the type `monoio::driver::shared_fd::SharedFd`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/driver/shared_fd.rs:16:19
     |
16   | pub(crate) struct SharedFd {
     |                   ^^^^^^^^
note: required because it appears within the type `common::reexports::monoio::net::UnixStream`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-0.2.4/src/net/unix/stream.rs:25:12
     |
25   | pub struct UnixStream {
     |            ^^^^^^^^^^
note: required because it appears within the type `UnsafeCell<UnixStream>`
    --> /home/tangerine-dev/.local/share/rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/cell.rs:2075:12
     |
2075 | pub struct UnsafeCell<T: ?Sized> {
     |            ^^^^^^^^^^
note: required because it appears within the type `StreamWrapper<UnixStream>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/safe_wrapper.rs:14:12
     |
14   | pub struct StreamWrapper<T> {
     |            ^^^^^^^^^^^^^
note: required because it appears within the type `MonoioIo<StreamWrapper<UnixStream>>`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/monoio-compat-0.2.2/src/hyper.rs:80:16
     |
80   |     pub struct MonoioIo<T> {
     |                ^^^^^^^^
note: required by a bound in `Endpoint::connect_with_connector`
    --> /home/tangerine-dev/.local/share/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tonic-0.12.3/src/transport/channel/endpoint.rs:367:45
     |
364  | ...pub async fn connect_with_connector<C>(&self, connector: C) ->...
     |                 ---------------------- required by a bound in this associated function
...
367  | ...    C::Response: rt::Read + rt::Write + Send + Unpin,
     |                                            ^^^^ required by this bound in `Endpoint::connect_with_connector`
     = note: the full name for the type has been written to '/home/tangerine-dev/Documents/Launchd2/target/debug/deps/plugin-a6a1de2e49e046cd.long-type-14011519351921965014.txt'
     = note: consider using `--verbose` to print the full type name to the console


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants