Esempio n. 1
0
        internal static CallParticipantInternal DeserializeCallParticipantInternal(JsonElement element)
        {
            Optional <CommunicationIdentifierModel> identifier = default;
            Optional <string> participantId = default;
            bool isMuted = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("identifier"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    identifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("participantId"))
                {
                    participantId = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("isMuted"))
                {
                    isMuted = property.Value.GetBoolean();
                    continue;
                }
            }
            return(new CallParticipantInternal(identifier.Value, participantId.Value, isMuted));
        }
Esempio n. 2
0
        internal static ChatMessageReadReceiptInternal DeserializeChatMessageReadReceiptInternal(JsonElement element)
        {
            CommunicationIdentifierModel senderCommunicationIdentifier = default;
            string         chatMessageId = default;
            DateTimeOffset readOn        = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("senderCommunicationIdentifier"))
                {
                    senderCommunicationIdentifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("chatMessageId"))
                {
                    chatMessageId = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("readOn"))
                {
                    readOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
            }
            return(new ChatMessageReadReceiptInternal(senderCommunicationIdentifier, chatMessageId, readOn));
        }
Esempio n. 3
0
        internal static ChatParticipantInternal DeserializeChatParticipantInternal(JsonElement element)
        {
            CommunicationIdentifierModel communicationIdentifier = default;
            Optional <string>            displayName             = default;
            Optional <DateTimeOffset>    shareHistoryTime        = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("communicationIdentifier"))
                {
                    communicationIdentifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("displayName"))
                {
                    displayName = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("shareHistoryTime"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    shareHistoryTime = property.Value.GetDateTimeOffset("O");
                    continue;
                }
            }
            return(new ChatParticipantInternal(communicationIdentifier, displayName.Value, Optional.ToNullable(shareHistoryTime)));
        }
Esempio n. 4
0
        internal HttpMessage CreateJoinCallRequest(string conversationId, CommunicationIdentifierModel source, string callbackUri, IEnumerable <CallModality> requestedModalities, IEnumerable <EventSubscriptionType> requestedCallEvents, string subject)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Post;
            var uri = new RawRequestUriBuilder();

            uri.AppendRaw(endpoint, false);
            uri.AppendPath("/calling/conversations/", false);
            uri.AppendPath(conversationId, true);
            uri.AppendPath("/Join", false);
            uri.AppendQuery("api-version", apiVersion, true);
            request.Uri = uri;
            request.Headers.Add("Accept", "application/json");
            request.Headers.Add("Content-Type", "application/json");
            var model = new JoinCallRequestInternal(source, callbackUri, requestedModalities.ToList(), requestedCallEvents.ToList())
            {
                Subject = subject
            };
            var content = new Utf8JsonRequestContent();

            content.JsonWriter.WriteObjectValue(model);
            request.Content = content;
            return(message);
        }
Esempio n. 5
0
 internal ChatMessageContentInternal(string message, string topic, IReadOnlyList <ChatParticipantInternal> participants, CommunicationIdentifierModel initiatorCommunicationIdentifier)
 {
     Message      = message;
     Topic        = topic;
     Participants = participants;
     InitiatorCommunicationIdentifier = initiatorCommunicationIdentifier;
 }
Esempio n. 6
0
        internal static ParticipantInput DeserializeParticipantInput(JsonElement element)
        {
            CommunicationIdentifierModel id = default;
            Optional <string>            placeholderImageUri = default;
            string call = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("id"))
                {
                    id = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("placeholderImageUri"))
                {
                    placeholderImageUri = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("call"))
                {
                    call = property.Value.GetString();
                    continue;
                }
            }
            return(new ParticipantInput(id, placeholderImageUri.Value, call));
        }
Esempio n. 7
0
        public CreateCallRequestInternal(IEnumerable <CommunicationIdentifierModel> targets, CommunicationIdentifierModel source, string callbackUri, IEnumerable <CallModality> requestedModalities, IEnumerable <EventSubscriptionType> requestedCallEvents)
        {
            if (targets == null)
            {
                throw new ArgumentNullException(nameof(targets));
            }
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (callbackUri == null)
            {
                throw new ArgumentNullException(nameof(callbackUri));
            }
            if (requestedModalities == null)
            {
                throw new ArgumentNullException(nameof(requestedModalities));
            }
            if (requestedCallEvents == null)
            {
                throw new ArgumentNullException(nameof(requestedCallEvents));
            }

            Targets             = targets.ToList();
            Source              = source;
            CallbackUri         = callbackUri;
            RequestedModalities = requestedModalities.ToList();
            RequestedCallEvents = requestedCallEvents.ToList();
        }
 internal ChatThreadPropertiesInternal(string id, string topic, DateTimeOffset createdOn, CommunicationIdentifierModel createdByCommunicationIdentifier, DateTimeOffset?deletedOn)
 {
     Id        = id;
     Topic     = topic;
     CreatedOn = createdOn;
     CreatedByCommunicationIdentifier = createdByCommunicationIdentifier;
     DeletedOn = deletedOn;
 }
Esempio n. 9
0
        public ChatParticipantInternal(CommunicationIdentifierModel communicationIdentifier)
        {
            if (communicationIdentifier == null)
            {
                throw new ArgumentNullException(nameof(communicationIdentifier));
            }

            CommunicationIdentifier = communicationIdentifier;
        }
 internal ChatMessageInternal(string id, ChatMessageType type, string sequenceId, string version, ChatMessageContentInternal content, string senderDisplayName, DateTimeOffset createdOn, CommunicationIdentifierModel senderCommunicationIdentifier, DateTimeOffset?deletedOn, DateTimeOffset?editedOn)
 {
     Id                            = id;
     Type                          = type;
     SequenceId                    = sequenceId;
     Version                       = version;
     Content                       = content;
     SenderDisplayName             = senderDisplayName;
     CreatedOn                     = createdOn;
     SenderCommunicationIdentifier = senderCommunicationIdentifier;
     DeletedOn                     = deletedOn;
     EditedOn                      = editedOn;
 }
Esempio n. 11
0
        public ParticipantInput(CommunicationIdentifierModel id, string call)
        {
            if (id == null)
            {
                throw new ArgumentNullException(nameof(id));
            }
            if (call == null)
            {
                throw new ArgumentNullException(nameof(call));
            }

            Id   = id;
            Call = call;
        }
        internal ChatMessageReadReceiptInternal(CommunicationIdentifierModel senderCommunicationIdentifier, string chatMessageId, DateTimeOffset readOn)
        {
            if (senderCommunicationIdentifier == null)
            {
                throw new ArgumentNullException(nameof(senderCommunicationIdentifier));
            }
            if (chatMessageId == null)
            {
                throw new ArgumentNullException(nameof(chatMessageId));
            }

            SenderCommunicationIdentifier = senderCommunicationIdentifier;
            ChatMessageId = chatMessageId;
            ReadOn        = readOn;
        }
        public JoinCallRequestInternal(CommunicationIdentifierModel source, string callbackUri)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (callbackUri == null)
            {
                throw new ArgumentNullException(nameof(callbackUri));
            }

            Source              = source;
            CallbackUri         = callbackUri;
            RequestedMediaTypes = new ChangeTrackingList <MediaType>();
            RequestedCallEvents = new ChangeTrackingList <EventSubscriptionType>();
        }
Esempio n. 14
0
        internal static ChatMessageContentInternal DeserializeChatMessageContentInternal(JsonElement element)
        {
            Optional <string> message = default;
            Optional <string> topic   = default;
            Optional <IReadOnlyList <ChatParticipantInternal> > participants = default;
            Optional <CommunicationIdentifierModel>             initiatorCommunicationIdentifier = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("message"))
                {
                    message = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("topic"))
                {
                    topic = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("participants"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <ChatParticipantInternal> array = new List <ChatParticipantInternal>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(ChatParticipantInternal.DeserializeChatParticipantInternal(item));
                    }
                    participants = array;
                    continue;
                }
                if (property.NameEquals("initiatorCommunicationIdentifier"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    initiatorCommunicationIdentifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
            }
            return(new ChatMessageContentInternal(message.Value, topic.Value, Optional.ToList(participants), initiatorCommunicationIdentifier.Value));
        }
Esempio n. 15
0
        internal static ChatThreadPropertiesInternal DeserializeChatThreadPropertiesInternal(JsonElement element)
        {
            string         id        = default;
            string         topic     = default;
            DateTimeOffset createdOn = default;
            CommunicationIdentifierModel createdByCommunicationIdentifier = default;
            Optional <DateTimeOffset>    deletedOn = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("id"))
                {
                    id = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("topic"))
                {
                    topic = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("createdOn"))
                {
                    createdOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
                if (property.NameEquals("createdByCommunicationIdentifier"))
                {
                    createdByCommunicationIdentifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("deletedOn"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    deletedOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
            }
            return(new ChatThreadPropertiesInternal(id, topic, createdOn, createdByCommunicationIdentifier, Optional.ToNullable(deletedOn)));
        }
 /// <summary> Remove a member from a thread .</summary>
 /// <param name="identifier"><see cref="CommunicationIdentifier" /> to be removed from the chat thread participants.</param>
 /// <param name="cancellationToken"> The cancellation token to use. </param>
 /// <exception cref="RequestFailedException">The server returned an error. See <see cref="Exception.Message"/> for details returned from the server.</exception>
 public virtual Response RemoveParticipant(CommunicationIdentifier identifier, CancellationToken cancellationToken = default)
 {
     using DiagnosticScope scope = _clientDiagnostics.CreateScope($"{nameof(ChatThreadClient)}.{nameof(RemoveParticipant)}");
     scope.Start();
     try
     {
         CommunicationIdentifierModel communicationIdentifierModel = CommunicationIdentifierSerializer.Serialize(identifier);
         return(_chatThreadRestClient.RemoveChatParticipant(Id, communicationIdentifierModel.RawId,
                                                            communicationIdentifierModel.CommunicationUser,
                                                            communicationIdentifierModel.PhoneNumber,
                                                            communicationIdentifierModel.MicrosoftTeamsUser,
                                                            cancellationToken));
     }
     catch (Exception ex)
     {
         scope.Failed(ex);
         throw;
     }
 }
        internal ChatThreadPropertiesInternal(string id, string topic, DateTimeOffset createdOn, CommunicationIdentifierModel createdByCommunicationIdentifier)
        {
            if (id == null)
            {
                throw new ArgumentNullException(nameof(id));
            }
            if (topic == null)
            {
                throw new ArgumentNullException(nameof(topic));
            }
            if (createdByCommunicationIdentifier == null)
            {
                throw new ArgumentNullException(nameof(createdByCommunicationIdentifier));
            }

            Id        = id;
            Topic     = topic;
            CreatedOn = createdOn;
            CreatedByCommunicationIdentifier = createdByCommunicationIdentifier;
        }
        public CreateCallRequestInternal(IEnumerable <CommunicationIdentifierModel> targets, CommunicationIdentifierModel source, string callbackUri)
        {
            if (targets == null)
            {
                throw new ArgumentNullException(nameof(targets));
            }
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (callbackUri == null)
            {
                throw new ArgumentNullException(nameof(callbackUri));
            }

            Targets             = targets.ToList();
            Source              = source;
            CallbackUri         = callbackUri;
            RequestedMediaTypes = new ChangeTrackingList <MediaType>();
            RequestedCallEvents = new ChangeTrackingList <EventSubscriptionType>();
        }
Esempio n. 19
0
        public async Task <Response <CreateCallResponse> > CreateCallAsync(IEnumerable <CommunicationIdentifierModel> targets, CommunicationIdentifierModel source, string callbackUri, IEnumerable <CallModality> requestedModalities, IEnumerable <EventSubscriptionType> requestedCallEvents, PhoneNumberIdentifierModel sourceAlternateIdentity = null, string subject = null, CancellationToken cancellationToken = default)
        {
            if (targets == null)
            {
                throw new ArgumentNullException(nameof(targets));
            }
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (callbackUri == null)
            {
                throw new ArgumentNullException(nameof(callbackUri));
            }
            if (requestedModalities == null)
            {
                throw new ArgumentNullException(nameof(requestedModalities));
            }
            if (requestedCallEvents == null)
            {
                throw new ArgumentNullException(nameof(requestedCallEvents));
            }

            using var message = CreateCreateCallRequest(targets, source, callbackUri, requestedModalities, requestedCallEvents, sourceAlternateIdentity, subject);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 201:
            {
                CreateCallResponse value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                value = CreateCallResponse.DeserializeCreateCallResponse(document.RootElement);
                return(Response.FromValue(value, message.Response));
            }
 internal AcsChatThreadParticipantProperties(string displayName, CommunicationIdentifierModel participantCommunicationIdentifier)
 {
     DisplayName = displayName;
     ParticipantCommunicationIdentifier = participantCommunicationIdentifier;
 }
 public static AcsChatMessageEditedEventData AcsChatMessageEditedEventData(CommunicationIdentifierModel recipientCommunicationIdentifier = null, string transactionId = null, string threadId = null, string messageId = null, CommunicationIdentifierModel senderCommunicationIdentifier = null, string senderDisplayName = null, DateTimeOffset?composeTime = null, string type = null, long?version = null, string messageBody = null, DateTimeOffset?editTime = null)
 {
     return(new AcsChatMessageEditedEventData(recipientCommunicationIdentifier, transactionId, threadId, messageId, senderCommunicationIdentifier, senderDisplayName, composeTime, type, version, messageBody, new ChangeTrackingDictionary <string, string>(), editTime));
 }
 public static AcsChatThreadCreatedWithUserEventData AcsChatThreadCreatedWithUserEventData(CommunicationIdentifierModel recipientCommunicationIdentifier = default, string transactionId = default, string threadId = default, DateTimeOffset?createTime = default, long?version = default, CommunicationIdentifierModel createdByCommunicationIdentifier = default, IReadOnlyDictionary <string, object> properties = default, IReadOnlyList <AcsChatThreadParticipantProperties> participants = default)
 {
     properties ??= new Dictionary <string, object>();
     participants ??= new List <AcsChatThreadParticipantProperties>();
     return(new AcsChatThreadCreatedWithUserEventData(recipientCommunicationIdentifier, transactionId, threadId, createTime, version, createdByCommunicationIdentifier, properties, participants));
 }
Esempio n. 23
0
        public async Task <Response <AddParticipantResult> > AddParticipantAsync(string serverCallId, PhoneNumberIdentifierModel alternateCallerId = null, CommunicationIdentifierModel participant = null, string operationContext = null, string callbackUri = null, CancellationToken cancellationToken = default)
        {
            if (serverCallId == null)
            {
                throw new ArgumentNullException(nameof(serverCallId));
            }

            using var message = CreateAddParticipantRequest(serverCallId, alternateCallerId, participant, operationContext, callbackUri);
            await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);

            switch (message.Response.Status)
            {
            case 202:
            {
                AddParticipantResult value = default;
                using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, default, cancellationToken).ConfigureAwait(false);

                value = AddParticipantResult.DeserializeAddParticipantResult(document.RootElement);
                return(Response.FromValue(value, message.Response));
            }
Esempio n. 24
0
        internal HttpMessage CreateAddParticipantRequest(string serverCallId, PhoneNumberIdentifierModel alternateCallerId, CommunicationIdentifierModel participant, string operationContext, string callbackUri)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Post;
            var uri = new RawRequestUriBuilder();

            uri.AppendRaw(endpoint, false);
            uri.AppendPath("/calling/serverCalls/", false);
            uri.AppendPath(serverCallId, true);
            uri.AppendPath("/participants", false);
            uri.AppendQuery("api-version", apiVersion, true);
            request.Uri = uri;
            request.Headers.Add("Accept", "application/json");
            request.Headers.Add("Content-Type", "application/json");
            var model = new AddParticipantRequest()
            {
                AlternateCallerId = alternateCallerId,
                Participant       = participant,
                OperationContext  = operationContext,
                CallbackUri       = callbackUri
            };
            var content = new Utf8JsonRequestContent();

            content.JsonWriter.WriteObjectValue(model);
            request.Content = content;
            return(message);
        }
 internal CallParticipantInternal(CommunicationIdentifierModel identifier, string participantId, bool isMuted)
 {
     Identifier    = identifier;
     ParticipantId = participantId;
     IsMuted       = isMuted;
 }
 public static AcsChatThreadCreatedWithUserEventData AcsChatThreadCreatedWithUserEventData(CommunicationIdentifierModel recipientCommunicationIdentifier, string transactionId, string threadId, DateTimeOffset?createTime, long?version, CommunicationIdentifierModel createdByCommunicationIdentifier, IReadOnlyDictionary <string, object> properties, IReadOnlyList <AcsChatThreadParticipantProperties> participants)
 {
     return(AcsChatThreadCreatedWithUserEventData(recipientCommunicationIdentifier, transactionId, threadId, createTime, version, createdByCommunicationIdentifier, properties, (IEnumerable <AcsChatThreadParticipantProperties>)participants));
 }
 public static AcsChatMessageEditedInThreadEventData AcsChatMessageEditedInThreadEventData(string transactionId, string threadId, string messageId, CommunicationIdentifierModel senderCommunicationIdentifier, string senderDisplayName, DateTimeOffset?composeTime, string type, long?version, string messageBody, DateTimeOffset?editTime)
 {
     return(AcsChatMessageEditedInThreadEventData(transactionId, threadId, messageId, senderCommunicationIdentifier, senderDisplayName, composeTime, type, version, messageBody, new ChangeTrackingDictionary <string, string>(), editTime));
 }
 public static AcsChatMessageReceivedEventData AcsChatMessageReceivedEventData(CommunicationIdentifierModel recipientCommunicationIdentifier, string transactionId, string threadId, string messageId, CommunicationIdentifierModel senderCommunicationIdentifier, string senderDisplayName, DateTimeOffset?composeTime, string type, long?version, string messageBody)
 {
     return(AcsChatMessageReceivedEventData(recipientCommunicationIdentifier, transactionId, threadId, messageId, senderCommunicationIdentifier, senderDisplayName, composeTime, type, version, messageBody, new ChangeTrackingDictionary <string, string>()));
 }
Esempio n. 29
0
        internal HttpMessage CreateCreateCallRequest(IEnumerable <CommunicationIdentifierModel> targets, CommunicationIdentifierModel source, string callbackUri, PhoneNumberIdentifierModel alternateCallerId, string subject, IEnumerable <MediaType> requestedMediaTypes, IEnumerable <EventSubscriptionType> requestedCallEvents)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Post;
            var uri = new RawRequestUriBuilder();

            uri.AppendRaw(endpoint, false);
            uri.AppendPath("/calling/callConnections", false);
            uri.AppendQuery("api-version", apiVersion, true);
            request.Uri = uri;
            request.Headers.Add("Accept", "application/json");
            request.Headers.Add("Content-Type", "application/json");
            CreateCallRequestInternal createCallRequestInternal = new CreateCallRequestInternal(targets.ToList(), source, callbackUri)
            {
                AlternateCallerId = alternateCallerId,
                Subject           = subject
            };

            if (requestedMediaTypes != null)
            {
                foreach (var value in requestedMediaTypes)
                {
                    createCallRequestInternal.RequestedMediaTypes.Add(value);
                }
            }
            if (requestedCallEvents != null)
            {
                foreach (var value in requestedCallEvents)
                {
                    createCallRequestInternal.RequestedCallEvents.Add(value);
                }
            }
            var model   = createCallRequestInternal;
            var content = new Utf8JsonRequestContent();

            content.JsonWriter.WriteObjectValue(model);
            request.Content = content;
            return(message);
        }
        internal static ChatMessageInternal DeserializeChatMessageInternal(JsonElement element)
        {
            string          id         = default;
            ChatMessageType type       = default;
            string          sequenceId = default;
            string          version    = default;
            Optional <ChatMessageContentInternal> content = default;
            Optional <string> senderDisplayName           = default;
            DateTimeOffset    createdOn = default;
            Optional <CommunicationIdentifierModel> senderCommunicationIdentifier = default;
            Optional <DateTimeOffset> deletedOn = default;
            Optional <DateTimeOffset> editedOn  = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("id"))
                {
                    id = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = new ChatMessageType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("sequenceId"))
                {
                    sequenceId = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("version"))
                {
                    version = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("content"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    content = ChatMessageContentInternal.DeserializeChatMessageContentInternal(property.Value);
                    continue;
                }
                if (property.NameEquals("senderDisplayName"))
                {
                    senderDisplayName = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("createdOn"))
                {
                    createdOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
                if (property.NameEquals("senderCommunicationIdentifier"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    senderCommunicationIdentifier = CommunicationIdentifierModel.DeserializeCommunicationIdentifierModel(property.Value);
                    continue;
                }
                if (property.NameEquals("deletedOn"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    deletedOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
                if (property.NameEquals("editedOn"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    editedOn = property.Value.GetDateTimeOffset("O");
                    continue;
                }
            }
            return(new ChatMessageInternal(id, type, sequenceId, version, content.Value, senderDisplayName.Value, createdOn, senderCommunicationIdentifier.Value, Optional.ToNullable(deletedOn), Optional.ToNullable(editedOn)));
        }