pub fn add_handler<F, Fut, T>(&mut self, topic_regex: Regex, func: F)
where
T: for<'d> Deserialize<'d>,
F: Fn(Arc<State>, &Self, T, String) -> Fut + 'static,
Fut: Future<Output = Result<(), Err>> + 'static,
{
self.handlers.push((
topic_regex,
Box::new(move |state, self_, publish, matches| {
let val = serde_json::from_slice(&publish.payload)?;
Ok(Box::pin(func(state, self_, val, matches)))
}),
));
}
async fn handle_canary_group_assigned<'l>(
self: Arc<Self>,
client: &Client,
canary_group: CanaryGroup,
_: String,
) -> Result<()>
error[E0308]: mismatched types
--> daemon\src\mqtt.rs:41:9
|
41 | / client.add_handler(
42 | | Regex::new(r"^/devices/\d+/canary_group$").unwrap(),
43 | | Self::handle_canary_group_assigned,
44 | | );
| |_________^ one type is more general than the other
|
= note: expected opaque type `impl for<'a> Future<Output = std::result::Result<(), error::Error>>`
found opaque type `impl Future<Output = std::result::Result<(), error::Error>>`
= help: consider `await`ing on both `Future`s
= note: distinct uses of `impl Trait` result in different opaque types
note: the lifetime requirement is introduced here
--> C:\Users\punks\RustroverProjects\fleet-commander\protocol\src\mqtt_client.rs:89:48
|
89 | F: Fn(Arc<State>, &Self, T, String) -> Fut + 'static,
| ^^^
&Client
Как можно сделать чтобы он смог вывести что это один и тот же лайфтайм?
Какой тот же? У тебя требование: Fut: Future<Output = Result<(), Err>> + 'static, нельзя ни на что ссылаться. Поменяй хандлер на client: Arc<Client>,
Но я не могу. У меня коллер этих коллбеков mut self прнимает
Обсуждают сегодня