Rust 我可以从未来返回std::result::result吗?

Rust 我可以从未来返回std::result::result吗?,rust,Rust,我在努力了解未来。我做到了: #[derive(Debug)] pub enum ClientError { UrlParseError((String, String)), BindError } pub async fn connect(addr: std::net::SocketAddr) -> impl std::future::Future<Output = std::result::Result<(), ClientError>> {

我在努力了解未来。我做到了:

#[derive(Debug)]
pub enum ClientError {
    UrlParseError((String, String)),
    BindError
}

pub async fn connect(addr: std::net::SocketAddr) -> impl std::future::Future<Output = std::result::Result<(), ClientError>> {
    let listener = async_std::net::TcpListener::bind(&addr).await;
    let listener = match listener {
        Ok(listener) => listener,
        Err(_) => return Err(ClientError::BindError)
    };
    //Ok(())
    std::future::ready(Ok(()))
}
#[派生(调试)]
发布枚举客户端错误{
UrlParseError((字符串,字符串)),
宾德罗
}
发布异步fn连接(地址:std::net::SocketAddr)->impl std::future::future{
让listener=async\u std::net::TcpListener::bind(&addr);
让侦听器=匹配侦听器{
Ok(listener)=>listener,
Err()=>返回Err(ClientError::BindError)
};
//好(())
std::future::ready(Ok(()))
}
我明白了

error[E0277]:`std::result::result`不是未来
-->src/lib.rs:7:53
|
7 |发布异步fn连接(地址:std::net::SocketAddr)->impl std::future::future{
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
=帮助:“std::result::result”未实现特性“Future”`
错误[E0308]:类型不匹配
-->src/lib.rs:14:5
|
14 | std::future::ready(Ok(()))
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^预期的枚举'std::result::result',找到的结构'std::future::Ready'`
|
=注意:类型应为'std::result::result'`
找到结构“std::future::Ready”`
注意:此处的返回类型推断为'std::result::result'
-->src/lib.rs:11:26
|
11 | Err()=>返回Err(ClientError::BindError)
|                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
我真的不知道怎么回事。我不能从未来返回
结果

我怎样才能解决这个问题

我试着只返回
Ok(())
,没有第二个错误

这对你有用吗

#[derive(Debug)]
pub enum ClientError {
    UrlParseError((String, String)),
    BindError
}

pub async fn connect(addr: std::net::SocketAddr) -> Result<(), ClientError> {
    let listener = async_std::net::TcpListener::bind(&addr)
        .await
        .or(Err(ClientError::BindError))?
    ;

    Ok(())
}
#[派生(调试)]
发布枚举客户端错误{
UrlParseError((字符串,字符串)),
宾德罗
}
发布异步fn connect(addr:std::net::SocketAddr)->Result{
let listener=async\u std::net::TcpListener::bind(&addr)
.等待
.或(Err(ClientError::binderro))?
;
好(())
}

在返回中不需要impl Future。这在异步说明符中是隐含的。@user1937198然后我在这个connect函数中得到了一个关于编译时不知道大小的错误?这听起来不对。你能不能发布一个消息,以便我们能更清楚地看到缺失的内容。@user1937198我尝试过,这是一个最小的可重复示例,除了需要导入async\u std。我尝试在操场上放置,但它没有async\u stc
#[derive(Debug)]
pub enum ClientError {
    UrlParseError((String, String)),
    BindError
}

pub async fn connect(addr: std::net::SocketAddr) -> Result<(), ClientError> {
    let listener = async_std::net::TcpListener::bind(&addr)
        .await
        .or(Err(ClientError::BindError))?
    ;

    Ok(())
}