编写一个 returns 流式传输生命周期的函数
Write a function that returns stream with lifetime
我正在尝试实现从 rustls
:
获取地址和 returns TLS 连接的“连接”
impl Connector {
...
fn connect(&self, address: String) -> rustls::Stream<ClientConnection, TcpStream> {
let target_address = address.parse().unwrap();
let server_name = rustls::ServerName::from(address).unwrap();
let mut tcp_stream = TcpStream::connect(target_address).unwrap();
let mut client_conn = rustls::ClientConnection::new(Arc::new(self.client_config), server_name).unwrap();
rustls::Stream::new(&mut client_conn, &mut tcp_stream)
}
这不起作用,因为 client_conn
和 tcp_stream
是在函数内借用的。 Stream
有生命周期:
https://docs.rs/rustls/latest/rustls/struct.Stream.html
#[derive(Debug)]
pub struct Stream<'a, C: 'a + ?Sized, T: 'a + Read + Write + ?Sized> {
/// Our TLS connection
pub conn: &'a mut C,
/// The underlying transport, like a socket
pub sock: &'a mut T,
}
那么,如何在 connect
函数中创建此 Stream
对象,并相应地 returns 生命周期>
我认为 Stream
是错误的数据类型。据我所知,它没有取得连接对象的所有权。
在文档中快速搜索让我相信您正在搜索的是 StreamOwned
。
我正在尝试实现从 rustls
:
impl Connector {
...
fn connect(&self, address: String) -> rustls::Stream<ClientConnection, TcpStream> {
let target_address = address.parse().unwrap();
let server_name = rustls::ServerName::from(address).unwrap();
let mut tcp_stream = TcpStream::connect(target_address).unwrap();
let mut client_conn = rustls::ClientConnection::new(Arc::new(self.client_config), server_name).unwrap();
rustls::Stream::new(&mut client_conn, &mut tcp_stream)
}
这不起作用,因为 client_conn
和 tcp_stream
是在函数内借用的。 Stream
有生命周期:
https://docs.rs/rustls/latest/rustls/struct.Stream.html
#[derive(Debug)]
pub struct Stream<'a, C: 'a + ?Sized, T: 'a + Read + Write + ?Sized> {
/// Our TLS connection
pub conn: &'a mut C,
/// The underlying transport, like a socket
pub sock: &'a mut T,
}
那么,如何在 connect
函数中创建此 Stream
对象,并相应地 returns 生命周期>
我认为 Stream
是错误的数据类型。据我所知,它没有取得连接对象的所有权。
在文档中快速搜索让我相信您正在搜索的是 StreamOwned
。