Move inner auth_chan eval into closure.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -278,35 +278,37 @@ pub fn get_event_auth_chain_ids<'a>(
|
|||||||
.collect(),
|
.collect(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let eval = |auth_events: AuthEvents, mut state: State<_>| {
|
||||||
|
let push = |auth_event: &OwnedEventId| {
|
||||||
|
trace!(todo = state.todo.len(), ?auth_event, "push");
|
||||||
|
state
|
||||||
|
.todo
|
||||||
|
.push(self.get_event_auth_event_ids(room_id, auth_event.clone()));
|
||||||
|
};
|
||||||
|
|
||||||
|
let seen = |auth_event: OwnedEventId| {
|
||||||
|
state
|
||||||
|
.seen
|
||||||
|
.insert(auth_event.clone())
|
||||||
|
.then_some(auth_event)
|
||||||
|
};
|
||||||
|
|
||||||
|
let out = auth_events
|
||||||
|
.into_iter()
|
||||||
|
.filter_map(seen)
|
||||||
|
.inspect(push)
|
||||||
|
.collect::<AuthEvents>()
|
||||||
|
.into_iter()
|
||||||
|
.stream();
|
||||||
|
|
||||||
|
(out, state)
|
||||||
|
};
|
||||||
|
|
||||||
unfold(state, move |mut state| async move {
|
unfold(state, move |mut state| async move {
|
||||||
match state.todo.next().await {
|
match state.todo.next().await {
|
||||||
| None => None,
|
| None => None,
|
||||||
| Some(Err(_)) => Some((AuthEvents::new().into_iter().stream(), state)),
|
| Some(Err(_)) => Some((AuthEvents::new().into_iter().stream(), state)),
|
||||||
| Some(Ok(auth_events)) => {
|
| Some(Ok(auth_events)) => Some(eval(auth_events, state)),
|
||||||
let push = |auth_event: &OwnedEventId| {
|
|
||||||
trace!(?event_id, ?auth_event, "push");
|
|
||||||
state
|
|
||||||
.todo
|
|
||||||
.push(self.get_event_auth_event_ids(room_id, auth_event.clone()));
|
|
||||||
};
|
|
||||||
|
|
||||||
let seen = |auth_event: OwnedEventId| {
|
|
||||||
state
|
|
||||||
.seen
|
|
||||||
.insert(auth_event.clone())
|
|
||||||
.then_some(auth_event)
|
|
||||||
};
|
|
||||||
|
|
||||||
let out = auth_events
|
|
||||||
.into_iter()
|
|
||||||
.filter_map(seen)
|
|
||||||
.inspect(push)
|
|
||||||
.collect::<AuthEvents>()
|
|
||||||
.into_iter()
|
|
||||||
.stream();
|
|
||||||
|
|
||||||
Some((out, state))
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.flatten()
|
.flatten()
|
||||||
|
|||||||
Reference in New Issue
Block a user