MCPcopy Create free account
hub / github.com/Effect-TS/effect / offer

Function offer

packages/effect/src/Queue.ts:645–669  ·  view source on GitHub ↗
(self: Enqueue<A, E>, message: Types.NoInfer<A>)

Source from the content-addressed store, hash-verified

643 * @since 2.0.0
644 */
645export 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.

Callers 1

TxQueue.tsFile · 0.70

Calls 4

releaseTakersFunction · 0.85
offerRemainingSingleFunction · 0.85
scheduleReleaseTakerFunction · 0.85
takeMethod · 0.65

Tested by

no test coverage detected