(self: Enqueue<A, E>, message: Types.NoInfer<A>)
| 643 | * @since 2.0.0 |
| 644 | */ |
| 645 | export const offer = <A, E>(self: Enqueue<A, E>, message: Types.NoInfer<A>): Effect<boolean> => |
| 646 | internalEffect.suspend(() => { |
| 647 | if (self.state._tag !== "Open") { |
| 648 | return exitFalse |
| 649 | } else if (self.messages.length >= self.capacity) { |
| 650 | switch (self.strategy) { |
| 651 | case "dropping": |
| 652 | return exitFalse |
| 653 | case "suspend": |
| 654 | if (self.capacity <= 0 && self.state.takers.size > 0) { |
| 655 | MutableList.append(self.messages, message) |
| 656 | releaseTakers(self as Queue<A, E>) |
| 657 | return exitTrue |
| 658 | } |
| 659 | return offerRemainingSingle(self as Queue<A, E>, message) |
| 660 | case "sliding": |
| 661 | MutableList.take(self.messages) |
| 662 | MutableList.append(self.messages, message) |
| 663 | return exitTrue |
| 664 | } |
| 665 | } |
| 666 | MutableList.append(self.messages, message) |
| 667 | scheduleReleaseTaker(self as Queue<A, E>) |
| 668 | return exitTrue |
| 669 | }) |
| 670 | |
| 671 | /** |
| 672 | * Adds a message to the queue synchronously. Returns `false` if the queue is done. |
no test coverage detected