MCPcopy Index your code
hub / github.com/Effect-TS/effect / CounterImpl

Class CounterImpl

packages/effect/test/utils/counter.ts:14–47  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12}
13
14class CounterImpl implements Counter {
15 constructor(readonly ref: Ref.Ref<readonly [number, number]>) {}
16
17 acquire(): Effect.Effect<number, never, Scope.Scope> {
18 return pipe(
19 this.incrementAcquire(),
20 Effect.zipRight(Effect.addFinalizer(() => this.incrementRelease())),
21 Effect.zipRight(this.acquired()),
22 Effect.uninterruptible
23 )
24 }
25
26 incrementAcquire(): Effect.Effect<number> {
27 return Ref.modify(this.ref, ([acquire, release]) => [acquire + 1, [acquire + 1, release] as const] as const)
28 }
29
30 incrementRelease(): Effect.Effect<number> {
31 return Ref.modify(this.ref, ([acquire, release]) => [release + 1, [acquire, release + 1] as const] as const)
32 }
33
34 acquired(): Effect.Effect<number> {
35 return pipe(
36 Ref.get(this.ref),
37 Effect.map((tuple) => tuple[0])
38 )
39 }
40
41 released(): Effect.Effect<number> {
42 return pipe(
43 Ref.get(this.ref),
44 Effect.map((tuple) => tuple[1])
45 )
46 }
47}
48
49export const make = (): Effect.Effect<Counter> => {
50 return pipe(

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected