(
envelopes: Array<{
readonly envelope: Envelope.Envelope.Encoded
readonly lastSentReply: Option.Option<Reply.ReplyEncoded<any>>
}>
)
| 545 | }) |
| 546 | |
| 547 | const decodeMessages = ( |
| 548 | envelopes: Array<{ |
| 549 | readonly envelope: Envelope.Envelope.Encoded |
| 550 | readonly lastSentReply: Option.Option<Reply.ReplyEncoded<any>> |
| 551 | }> |
| 552 | ) => { |
| 553 | const messages: Array<Message.Incoming<any>> = [] |
| 554 | let index = 0 |
| 555 | |
| 556 | // if we have a malformed message, we should not return it and update |
| 557 | // the storage with a defect |
| 558 | const decodeMessage = Effect.catchAll( |
| 559 | Effect.suspend(() => { |
| 560 | const envelope = envelopes[index] |
| 561 | if (!envelope) return Effect.succeed(undefined) |
| 562 | return decodeEnvelopeWithReply(envelope) |
| 563 | }), |
| 564 | (error) => { |
| 565 | const envelope = envelopes[index] |
| 566 | return storage.saveReply(Reply.ReplyWithContext.fromDefect({ |
| 567 | id: snowflakeGen.unsafeNext(), |
| 568 | requestId: Snowflake.Snowflake(envelope.envelope.requestId), |
| 569 | defect: error.toString() |
| 570 | })).pipe( |
| 571 | Effect.forkDaemon, |
| 572 | Effect.asVoid |
| 573 | ) |
| 574 | } |
| 575 | ) |
| 576 | return Effect.as( |
| 577 | Effect.whileLoop({ |
| 578 | while: () => index < envelopes.length, |
| 579 | body: () => decodeMessage, |
| 580 | step: (message) => { |
| 581 | const envelope = envelopes[index++] |
| 582 | if (!message) return |
| 583 | messages.push( |
| 584 | message.envelope._tag === "Request" |
| 585 | ? new Message.IncomingRequest({ |
| 586 | envelope: message.envelope, |
| 587 | lastSentReply: envelope.lastSentReply, |
| 588 | respond: storage.saveReply |
| 589 | }) |
| 590 | : new Message.IncomingEnvelope({ |
| 591 | envelope: message.envelope |
| 592 | }) |
| 593 | ) |
| 594 | } |
| 595 | }), |
| 596 | messages |
| 597 | ) |
| 598 | } |
| 599 | |
| 600 | const decodeReplies = ( |
| 601 | messages: Map<string, Message.OutgoingRequest<any>>, |
no test coverage detected