An active source with step can be wrapped like this:
Sink(AdapterSource(Source(AdapterSink)))
or Sink(AdapterSource(Source(ItsSource, AdapterSink)))
- Sink calls pull or peek on AdapterSource
- AdapterSource calls step(n) on Source, where n is a hint on how many elements are to be written to AdapterSink. (TODO: should n be just a hint or an exact required number?)
- Step calls alloc/commit or push on AdapterSink.
- AdapterSource gets data from AdapterSink and passes them to Sink.
An active source with step can be wrapped like this:
Sink(AdapterSource(Source(AdapterSink)))
or Sink(AdapterSource(Source(ItsSource, AdapterSink)))