Add and use InputSession
#716
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR re-imagines how we provide access to inputs to users, through an
InputSession
that can (and must) enumerate all(time, data)
pairs. This encourages folks to use inputs idiomatically, rather than potentially draining inputs or potentially not (with "not" being a logical error because the operator may not be scheduled again).The
InputSession
has one method that groups all(time, data)
bytime
and providesdata
as an iterator over mutable container references. The migration path is pretty standard, but occasionally fiddly. Eachwhile let Some((time, data)) = input.next()
loop turns in toinput.for_each(|time, data| {
wheredata
is one additional layer of iterator, and needs to beflat_map
d or the like. This method consumes the input session, which addresses the#[must_use]
attribute.One alternative that could make the migration that much easier is to leave
for_each
as the container-at-a-time iteration that it is right now, and add aby_time
orfor_time
or something that does the grouping. I think we want to encourage the latter, and making the migration lightly disruptive in order to do so might be fine.