class MyQueue extends Effect.Service<MyQueue>()("MyQueue", {
effect: Effect.gen(function* () {
yield* Effect.log("Starting the Queue Runtime");
const q = yield* Queue.unbounded();
return q;
}),
}) {}
export class Send extends Effect.Service<Send>()("Send", {
effect: Effect.gen(function* () {
const q = yield* MyQueue;
return {
send: (a) =>
Effect.gen(function* () {
yield* Effect.log("SEND", a);
yield* Queue.offer(q, a);
}),
};
}),
dependencies: [MyQueue.Default],
}) {}
export class Take extends Effect.Service<Take>()("Take", {
effect: Effect.gen(function* () {
const q = yield* MyQueue;
return {
take: () =>
Effect.gen(function* () {
const elem = yield* Queue.take(q);
yield* Effect.log(elem);
}),
};
}),
dependencies: [MyQueue.Default],
}) {}
class MyQueue extends Effect.Service<MyQueue>()("MyQueue", {
effect: Effect.gen(function* () {
yield* Effect.log("Starting the Queue Runtime");
const q = yield* Queue.unbounded();
return q;
}),
}) {}
export class Send extends Effect.Service<Send>()("Send", {
effect: Effect.gen(function* () {
const q = yield* MyQueue;
return {
send: (a) =>
Effect.gen(function* () {
yield* Effect.log("SEND", a);
yield* Queue.offer(q, a);
}),
};
}),
dependencies: [MyQueue.Default],
}) {}
export class Take extends Effect.Service<Take>()("Take", {
effect: Effect.gen(function* () {
const q = yield* MyQueue;
return {
take: () =>
Effect.gen(function* () {
const elem = yield* Queue.take(q);
yield* Effect.log(elem);
}),
};
}),
dependencies: [MyQueue.Default],
}) {}