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

Function makeMessageDecode

packages/cluster/src/internal/entityManager.ts:578–637  ·  view source on GitHub ↗
(
  entity: Entity<Type, Rpcs>,
  entityRpcs: Map<string, Rpcs>
)

Source from the content-addressed store, hash-verified

576)
577
578const makeMessageDecode = <Type extends string, Rpcs extends Rpc.Any>(
579 entity: Entity<Type, Rpcs>,
580 entityRpcs: Map<string, Rpcs>
581) => {
582 const decodeRequest = (
583 message: Message.IncomingRequest<Rpcs>,
584 rpc: Rpc.AnyWithProps
585 ) => {
586 const payload = Schema.decode(rpc.payloadSchema)(message.envelope.payload)
587 const lastSentReply = Option.isSome(message.lastSentReply)
588 ? Effect.asSome(Schema.decode(Reply.Reply(rpc as any))(message.lastSentReply.value))
589 : Effect.succeedNone
590 return Effect.flatMap(payload, (payload) =>
591 Effect.map(lastSentReply, (lastSentReply) => ({
592 _tag: "IncomingRequest" as const,
593 envelope: {
594 ...message.envelope,
595 payload
596 } as Envelope.Request.Any,
597 lastSentReply
598 })))
599 }
600
601 return (message: Message.Incoming<Rpcs>): Effect.Effect<
602 {
603 readonly _tag: "IncomingRequest"
604 readonly envelope: Envelope.Request.Any
605 readonly lastSentReply: Option.Option<Reply.Reply<Rpcs>>
606 } | {
607 readonly _tag: "IncomingEnvelope"
608 readonly envelope: Envelope.AckChunk | Envelope.Interrupt
609 },
610 ParseResult.ParseError,
611 Rpc.Context<Rpcs>
612 > => {
613 if (message._tag === "IncomingEnvelope") {
614 return Effect.succeed(message)
615 }
616 const rpc = entityRpcs.get(message.envelope.tag) as any as Rpc.AnyWithProps
617 if (!rpc) {
618 return Effect.fail(
619 new ParseResult.ParseError({
620 issue: new ParseResult.Unexpected(
621 message,
622 `Unknown tag ${message.envelope.tag} for entity type ${entity.type}`
623 )
624 })
625 )
626 }
627 return decodeRequest(message, rpc) as Effect.Effect<
628 {
629 readonly _tag: "IncomingRequest"
630 readonly envelope: Envelope.Request.Any
631 readonly lastSentReply: Option.Option<Reply.Reply<Rpcs>>
632 },
633 ParseResult.ParseError,
634 Rpc.Context<Rpcs>
635 >

Callers 1

entityManager.tsFile · 0.85

Calls 3

decodeRequestFunction · 0.85
getMethod · 0.65
failMethod · 0.65

Tested by

no test coverage detected