Hyperlinkv0.8.0-beta.28

PubSub

PubSub.remainingconsteffect/PubSub.ts:1428
<A>(self: Subscription<A>): Effect.Effect<number>

Returns the number of messages currently available in the subscription as an Effect.

When to use

Use when checking a subscription from effectful code and shutdown should interrupt the effect.

Details

The count includes replay-buffered messages. If the subscription has been shut down, the effect interrupts.

Example (Checking remaining messages)

import { Effect, PubSub } from "effect"

const program = Effect.gen(function*() {
  const pubsub = yield* PubSub.bounded<string>(10)

  yield* Effect.scoped(Effect.gen(function*() {
    const subscription = yield* PubSub.subscribe(pubsub)

    // Publish some messages
    yield* PubSub.publishAll(pubsub, ["msg1", "msg2", "msg3"])

    // Check how many messages are available
    const count = yield* PubSub.remaining(subscription)
    console.log("Messages available:", count) // 3

    // Take one message
    yield* PubSub.take(subscription)

    const remaining = yield* PubSub.remaining(subscription)
    console.log("Messages remaining:", remaining) // 2
  }))
})
Source effect/PubSub.ts:14286 lines
export const remaining = <A>(self: Subscription<A>): Effect.Effect<number> =>
  Effect.suspend(() =>
    self.shutdownFlag.current
      ? Effect.interrupt
      : Effect.succeed(self.subscription.size() + self.replayWindow.remaining)
  )