【发布时间】:2019-12-23 18:50:12
【问题描述】:
我正在尝试使用 streamdeck-rs 板条箱,但无法让 example code 工作。
我的实现基本上是给出的确切示例:
use futures::future::Future;
use std::env;
use streamdeck_rs::registration::*;
use streamdeck_rs::socket::StreamDeckSocket;
//the fields of these structs doesn't matter
struct GlobalSettings {}
struct ActionSettings {}
struct MessageToSd {}
struct MessageFromSd {}
fn register() {
let params = RegistrationParams::from_args(env::args()).unwrap();
let connect =
StreamDeckSocket::<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd>::connect(
params.port,
params.event,
params.uuid,
);
tokio::run(
connect
.map_err(|e| println!("connection failed: {:?}", e))
.and_then(|socket| {
socket
.for_each(|message| println!("recieved: {:?}", message))
.map_err(|e| println!("read error: {:?}", e))
}),
);
}
我的错误消息会根据我导入的内容而变化,但它始终是“方法for_each 存在但不满足以下特征界限”的变体。对于我现在列出的导入,我的错误消息是:
error[E0599]: no method named `for_each` found for type `streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd>` in the current scope
--> src/main.rs:37:35
|
37 | .and_then(|socket| socket.for_each(|message| println!("recieved: {:?}", message))
| ^^^^^^^^
|
= note: the method `for_each` exists but the following trait bounds were not satisfied:
`&mut streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd> : std::iter::Iterator`
我可以导入future::Stream:
use streamdeck_rs::registration::*;
use streamdeck_rs::socket::StreamDeckSocket;
use std::env;
use futures::future::Future;
use futures::Stream;
//rest same as before
我得到这个错误:
error[E0599]: no method named `for_each` found for type `streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd>` in the current scope
--> src/main.rs:37:35
|
37 | .and_then(|socket| socket.for_each(|message| println!("recieved: {:?}", message))
| ^^^^^^^^
|
= note: the method `for_each` exists but the following trait bounds were not satisfied:
`&mut streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd> : futures::stream::Stream`
`&mut streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd> : std::iter::Iterator`
`streamdeck_rs::socket::StreamDeckSocket<GlobalSettings, ActionSettings, MessageFromSd, MessageToSd> : futures::stream::Stream`
warning: unused import: `futures::Stream`
还要注意有关未使用导入的警告。
因为 StreamDeckSocket 是在 crate 中定义的,所以我无法在其上实现任何特征。
我知道这个问题以几种形式存在,但据我了解,这些答案仅适用于我正在使用的 crate 中缺少 trait 实现的情况。
【问题讨论】:
-
你肯定想要来自
futures::Stream的for_each()方法,所以你需要把这个特性带入范围。如果这导致更多错误,请将它们添加到问题中,以便我们找出解决方法。 -
@SvenMarnach 添加了有关
futures::Stream错误的更多详细信息 -
您使用的是什么版本的
streamdeck_rs和futures?快速浏览一下文档,StreamDeckSocket似乎应该实现Stream。 -
另请注意,您的某些结构需要
#[derive(Deserialize)]。
标签: rust