init()

in sdk/communication/AzureCommunicationChat/Source/Signaling/Events/ChatEvent.swift [874:918]


    init(from request: TrouterRequest) throws {
        guard let requestJsonData = request.body.data(using: .utf8) else {
            throw AzureError.client("Unable to convert request body to Data.")
        }

        let participantsRemovedPayload: ParticipantsRemovedPayload = try JSONDecoder()
            .decode(ParticipantsRemovedPayload.self, from: requestJsonData)

        guard let removedByJsonData = participantsRemovedPayload.removedBy.data(using: .utf8) else {
            throw AzureError.client("Unable to convert payload removedBy to Data.")
        }

        let removedByPayload: ChatParticipantPayload = try JSONDecoder()
            .decode(ChatParticipantPayload.self, from: removedByJsonData)
        let removedBy = SignalingChatParticipant(
            id: createCommunicationIdentifier(fromRawId: removedByPayload.participantId),
            displayName: removedByPayload.displayName
        )

        guard let participantsJsonData = participantsRemovedPayload.participantsRemoved.data(using: .utf8) else {
            throw AzureError.client("Unable to convert payload participantsRemoved to Data.")
        }

        let participantsPayload: [ChatParticipantPayload] = try JSONDecoder()
            .decode([ChatParticipantPayload].self, from: participantsJsonData)
        let participants: [SignalingChatParticipant] = participantsPayload
            .map { (memberPayload: ChatParticipantPayload) -> SignalingChatParticipant in
                SignalingChatParticipant(
                    id: createCommunicationIdentifier(fromRawId: memberPayload.participantId),
                    displayName: memberPayload.displayName,
                    shareHistoryTime: Iso8601Date(
                        string: TrouterEventUtil
                            .toIso8601Date(unixTime: memberPayload.shareHistoryTime)
                    )
                )
            }

        self.removedOn = Iso8601Date(string: participantsRemovedPayload.time)
        self.participantsRemoved = participants
        self.removedBy = removedBy
        super.init(
            threadId: participantsRemovedPayload.threadId,
            version: participantsRemovedPayload.version
        )
    }