#### [CallbagKit][Callbag]

Documentation

- [Sources](#sources) - [Sinkers](#sinkers) - [Operators](#operators) - [Pipes](#pipes)
**Callbags** has three major layers. > 1. #### Producer Layer *[Sources][Sources]*: > This layer is responsible for sending data. > > 2. #### Operator Layer *[Operators][Operators]*: > This layer is responsible for receiving data and do some operation, > then sending data. So this layer is considered as producer layer too. > The only difference is that it cannot send data without receiving them first. > > 3. #### Consumer Layer *[Sinkers][Sinkers]*: > This layer is responsible for receiving data. **Visually represented as:** ``` required optional required ╭──────────────╮ ╭────────────╮ ╭────────────╮ │ │<──│ │<──│ │ │ Producer │ │ Operator │ │ Consumer │ │ │──>│ │──>│ │ ╰──────────────╯ ╰────────────╯ ╰────────────╯ ``` *Note:* each **Callbags** Layer has its own Architecture Design. However they share the following concept: > 1. *Subscribe* Stage: > ``` > ╭────────────────────────╮ > │ ╭────────────────────╮ │ > <─┼─│ request Start │<┼── Handshake (required) > │ ╰────────────────────╯ │ > │ Only once │ > │ ╭────────────────────╮ │ > ──┼>│ receive Start ├─┼─> HandshakeBack (required) > │ ╰────────────────────╯ │ > ╰────────────────────────╯ > ``` > > 2. *Request/Receive Items* Stage: > ``` > ╭────────────────────────╮ > │ ╭────────────────────╮ │ > <─┼─│ request Next │<┼── WantItem (required for pullables) > │ ╰────────────────────╯ │ > │ As many as possible │ > │ ╭────────────────────╮ │ > ──┼>│ receive Next ├─┼─> TakeItem (optional) > │ ╰────────────────────╯ │ > ╰────────────────────────╯ > ``` > > 3. *Unsubscribe* Stage: > ``` > ╭────────────────────────╮ > │ ╭────────────────────╮ │ > <─┼─│ request Completion │<┼── Bye (optional) > │ ╰────────────────────╯ │ > │ Only once │ > │ ╭────────────────────╮ │ > ──┼>│ receive Completion ├─┼─> Bye/ByeBack (required) > │ ╰────────────────────╯ │ > ╰────────────────────────╯ > ```
- ### *[Sources][Sources]* 1. [**Creating**](./Sources/Creating/README.md) 1. [Empty](./Sources/Creating/Empty.md) 2. [Never](./Sources/Creating/Never.md) 3. [ThrowError](./Sources/Creating/ThrowError.md) 4. [From](./Sources/Creating/From.md) 5. [Of](./Sources/Creating/Of.md) 6. [Just](./Sources/Creating/Just.md) 7. [Interval](./Sources/Creating/Interval.md) 8. [Timer](./Sources/Creating/Timer.md) 2. [**Multicasting**](./Sources/Multicasting/README.md) 1. [Share](./Sources/Multicasting/Share.md) 2. [PublishSubject](./Sources/Multicasting/PublishSubject.md) 3. [AsyncSubject](./Sources/Multicasting/AsyncSubject.md) 4. [BehaviorSubject](./Sources/Multicasting/BehaviorSubject.md) 5. [ReplaySubject](./Sources/Multicasting/ReplaySubject.md) 3. [**Others**](./Sources/Others/README.md) 1. [Pullable](./Sources/Others/Pullable.md) 2. [Iteratable](./Sources/Others/Iteratable.md)
- ### *[Sinkers][Sinkers]* 1. [Assign](./Sinkers/Assign.md) 2. [Await](./Sinkers/Await.md) 3. [ForEach](./Sinkers/ForEach.md) 4. [Sink](./Sinkers/Sink.md) 5. [Observe](./Sinkers/Observe.md)
- ### *[Operators][Operators]* 1. [**Combining**](./Operators/Combining/README.md) 1. [Combine](./Operators/Combining/Combine.md) 2. [Concat](./Operators/Combining/Concat.md) 3. [Merge](./Operators/Combining/Merge.md) 4. [Race](./Operators/Combining/Race.md) 5. [SwitchLatest](./Operators/Combining/SwitchLatest.md) 6. [Zip](./Operators/Combining/Zip.md) 2. [**Debugging**](./Operators/Debugging/README.md) 1. [Breakpoint](./Operators/Debugging/Breakpoint.md) 2. [Debug](./Operators/Debugging/Debug.md) 3. [Print](./Operators/Debugging/Print.md) 4. [Tap](./Operators/Debugging/Tap.md) 3. [**ErrorHandling**](./Operators/ErrorHandling/README.md) 1. [Assert](./Operators/ErrorHandling/Assert.md) 2. [CatchError](./Operators/ErrorHandling/CatchError.md) 3. [MapError](./Operators/ErrorHandling/MapError.md) 4. [Retry](./Operators/ErrorHandling/Retry.md) 4. [**Filtering**](./Operators/Filtering/README.md) 1. [Distinct](./Operators/Filtering/Distinct.md) 2. [Filter](./Operators/Filtering/Filter.md) 3. [Reject](./Operators/Filtering/Reject.md) 4. [IgnoreElements](./Operators/Filtering/IgnoreElements.md) 5. [First](./Operators/Filtering/First.md) 6. [Last](./Operators/Filtering/Last.md) 7. [Drop](./Operators/Filtering/Drop.md) 8. [Skip](./Operators/Filtering/Skip.md) 9. [Take](./Operators/Filtering/Take.md) 5. [**Matching**](./Operators/Matching/README.md) 1. [AllSatisfy](./Operators/Matching/AllSatisfy.md) 2. [Contains](./Operators/Matching/Contains.md) 6. [**Mathematical**](./Operators/Mathematical/README.md) 1. [Average](./Operators/Mathematical/Average.md) 2. [Count](./Operators/Mathematical/Count.md) 3. [Max](./Operators/Mathematical/Max.md) 4. [Min](./Operators/Mathematical/Min.md) 5. [Sum](./Operators/Mathematical/Sum.md) 7. [**Threading**](./Operators/Threading/README.md) 1. [Async](./Operators/Threading/Async.md) 2. [Sync](./Operators/Threading/Sync.md) 3. [Blocking](./Operators/Threading/Blocking.md) 8. [**Timing**](./Operators/Timing/README.md) 1. [Debounce](./Operators/Timing/Debounce.md) 2. [Throttle](./Operators/Timing/Throttle.md) 3. [Durations](./Operators/Timing/Durations.md) 4. [Timestamps](./Operators/Timing/Timestamps.md) 5. [Timeout](./Operators/Timing/Timeout.md) 6. [Delay](./Operators/Timing/Delay.md) 7. [Wait](./Operators/Timing/Wait.md) 9. [**Transforming**](./Operators/Transforming/README.md) 1. [Indices](./Operators/Transforming/Indices.md) 2. [Buffer](./Operators/Transforming/Buffer.md) 3. [Collect](./Operators/Transforming/Collect.md) 4. [Codable](./Operators/Transforming/Codable.md) 5. [Components](./Operators/Transforming/Components.md) 6. [Split](./Operators/Transforming/Split.md) 7. [Joined](./Operators/Transforming/Joined.md) 8. [De-Materialize](./Operators/Transforming/De-Materialize.md) 9. [Map](./Operators/Transforming/Map.md) 10. [Compact](./Operators/Transforming/Compact.md) 11. [FlatMap](./Operators/Transforming/FlatMap.md) 12. [Pluck](./Operators/Transforming/Pluck.md) 13. [Group](./Operators/Transforming/Group.md) 14. [Partition](./Operators/Transforming/Partition.md) 15. [Reduce](./Operators/Transforming/Reduce.md) 16. [Loop](./Operators/Transforming/Loop.md) 17. [Scan](./Operators/Transforming/Scan.md) 18. [Repeats](./Operators/Transforming/Repeats.md) 19. [Replace](./Operators/Transforming/Replace.md)
- ### *[Pipes][Pipes]* [Callbag]: <../README.md> (Callbag) [Pipes]: <./Pipes/README.md> (Pipes) [Sources]: <./Sources/README.md> (Sources) [Sinkers]: <./Sinkers/README.md> (Sinkers) [Operators]: <./Operators/README.md> (Operators)