at the Design Principles behind Akka Streams I can read:
From this follows that the principles implemented by Akka Streams are:
* all features are explicit in the API, no magic
* supreme compositionality: combined pieces retain the function of each part
Then I see:
The most common building blocks are
* Source: something with exactly one output stream
* Sink: something with exactly one input stream
* Flow: something with exactly one input and one output stream
I can expect, according to the design principles, that a developer is able explicitly:
- take base class for building block, extend it if necessary, and instantiate it
- take base classes for input and/or output streams, extend them if necessary, and instantiate them
- add that inputs and outputs to the instance of building block - in any number
- define handling method which can take elements from inputs, create output elements and put them in outputs.
In fact, I could not see in the documentation how to do all that steps. I only see a lot of magic in form of method call chain, which create some internal structure, and then that internal structure is processed with a magic tool materializer and produces… God only knows what it produces and how it is mapped to the chain of method calls.
I can admit you address only smart developers who can master your magic tools and create desired graph of objects without new and extends keywords, but please do not claim that all features are explicit in the API, no magic. Tell honestly, that ordinary developers can pass by if they do not want to waste their time.