我的实现基本上就是给出的具体例子:
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是在机箱中定义的,所以我不能在它上实现任何特性。
我知道这个问题以几种形式存在,但据我所知,这些答案只有在我使用的板条箱中缺少特性实现时才适用。
发布于 2019-08-19 18:25:06
示例代码片段不太正确,但非常接近:
#[derive(Deserialize, Debug)]的结构for_each的闭包类型是错误的。以下是汇编:
use futures::future::Future;
use futures::stream::Stream;
use serde::Deserialize;
use std::env;
use streamdeck_rs::registration::*;
use streamdeck_rs::socket::StreamDeckSocket;
#[derive(Deserialize, Debug)]
struct GlobalSettings {}
#[derive(Deserialize, Debug)]
struct ActionSettings {}
#[derive(Deserialize, Debug)]
struct MessageToSd {}
#[derive(Deserialize, Debug)]
struct MessageFromSd {}
fn main() {
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);
Ok(())
})
.map_err(|e| println!("read error: {:?}", e))
}),
);
}https://stackoverflow.com/questions/57541687
复制相似问题