ServerTime
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { Schema as S } from "@effect/schema"
|
||||
import { ServerTime } from "@todo-tests/common/data"
|
||||
import { TRPCError } from "@trpc/server"
|
||||
import { observable } from "@trpc/server/observable"
|
||||
import { Context, Data, Effect, Fiber, Layer, Schedule } from "effect"
|
||||
@@ -6,6 +8,9 @@ import { RPCProcedureBuilder } from "./procedures/RPCProcedureBuilder"
|
||||
import { todoRouter } from "./routers/todo"
|
||||
|
||||
|
||||
const encodeServerTime = S.encode(ServerTime)
|
||||
|
||||
|
||||
export const router = Effect.gen(function*() {
|
||||
const t = yield* TRPCBuilder
|
||||
const procedure = yield* RPCProcedureBuilder
|
||||
@@ -17,10 +22,12 @@ export const router = Effect.gen(function*() {
|
||||
|
||||
serverTime: procedure
|
||||
.subscription(({ ctx }) =>
|
||||
observable<string>(emit => {
|
||||
observable<typeof ServerTime.Encoded>(emit => {
|
||||
const emitter = ctx.fork(
|
||||
Effect.sync(() => emit.next(new Date().toString())).pipe(
|
||||
Effect.repeat(Schedule.fixed("1 second"))
|
||||
Effect.sync(() => new Date()).pipe(
|
||||
Effect.flatMap(encodeServerTime),
|
||||
Effect.map(emit.next),
|
||||
Effect.repeat(Schedule.fixed("1 second")),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user