tokio_tungstenite::WebSocketStream的split()方法在哪里实现的?

Where is the split() method of tokio_tungstenite::WebSocketStream implemented?

tokio_tungstenite::WebSocketStream implement the split() function as used in one of their examples在哪里?

以下是示例的片段:

let (ws_stream, _) = connect_async(url).await.expect("Failed to connect");

let (write, read) = ws_stream.split(); 

其他人 tokio::net::TcpStream 中发现 split(),答案是 TcpStream 实现了 AsyncRead。在 WebSocketStream 的情况下,我看不到任何 impl AsyncRead for WebSocketStream 代码。

我更广泛的问题是我缺少什么知识阻止我在 docs.rs 或源代码中找到 split() 等方法及其对 WebSocketStream 等结构的实现代码?

我遗漏的概念是一揽子实现,其中模块中的特征对我的模块中的代码一无所知,可以为我的结构添加功能。只要外部代码的特征范围适合我的代码,就可以。

在这种情况下 WebSocketStream 实施 Stream。 futures crate 中有一个 trait StreamExt,它对 WebSocketStream 一无所知,但却是 Stream 的全面实现。它向 Stream 提供 split() 的功能,并且当 WebSocketStream 实现 Stream 时,它也获得了该功能。