sdk/communication/AzureCommunicationChat/Source/Generated/Chat.swift (374 lines of code) (raw):

// -------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See License.txt in the project root for // license information. // // Code generated by Microsoft (R) AutoRest Code Generator. // Changes may cause incorrect behavior and will be lost if the code is // regenerated. // -------------------------------------------------------------------------- import AzureCore import Foundation // swiftlint:disable superfluous_disable_command // swiftlint:disable file_length // swiftlint:disable cyclomatic_complexity // swiftlint:disable function_body_length // swiftlint:disable type_body_length internal final class Chat { internal let client: ChatClientInternal init(client: ChatClientInternal) { self.client = client } /// Creates a chat thread. /// - Parameters: /// - chatThread : Request payload for creating a chat thread. /// - options: A list of options for the operation /// - completionHandler: A completion handler that receives a status code on /// success. internal func create( chatThread: CreateChatThreadRequestInternal, withOptions options: CreateChatThreadOptions? = nil, completionHandler: @escaping HTTPResultHandler<CreateChatThreadResultInternal> ) { let dispatchQueue = options?.dispatchQueue ?? client.commonOptions.dispatchQueue ?? DispatchQueue.main // Create request parameters let params = RequestParameters( (.header, "repeatability-request-id", options?.repeatabilityRequestId, .encode), ( .uri, "endpoint", client.endpoint.absoluteString, .skipEncoding ), (.query, "api-version", client.options.apiVersion, .encode), (.header, "Content-Type", "application/json", .encode), (.header, "Accept", "application/json", .encode) ) // Construct request guard let requestBody = try? JSONEncoder().encode(chatThread) else { client.options.logger.error("Failed to encode request body as json.") return } let urlTemplate = "/chat/threads" guard let requestUrl = client.url(host: "{endpoint}", template: urlTemplate, params: params), let request = try? HTTPRequest(method: .post, url: requestUrl, headers: params.headers, data: requestBody) else { client.options.logger.error("Failed to construct HTTP request.") return } // Send request let context = PipelineContext.of(keyValues: [ ContextKey.allowedStatusCodes.rawValue: [201, 401, 403, 429, 503] as AnyObject ]) context.add(cancellationToken: options?.cancellationToken, applying: client.options) context.merge(with: options?.context) client.request(request, context: context) { result, httpResponse in guard let data = httpResponse?.data else { let noDataError = AzureError.client("Response data expected but not found.") dispatchQueue.async { completionHandler(.failure(noDataError), httpResponse) } return } switch result { case .success: guard let statusCode = httpResponse?.statusCode else { let noStatusCodeError = AzureError.client("Expected a status code in response but didn't find one.") dispatchQueue.async { completionHandler(.failure(noStatusCodeError), httpResponse) } return } if [ 201 ].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CreateChatThreadResultInternal.self, from: data) dispatchQueue.async { completionHandler(.success(decoded), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [401].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Unauthorized.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [403].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Forbidden.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [429].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Too many requests.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [503].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler( .failure(AzureError.service("Service unavailable.", decoded)), httpResponse ) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } case let .failure(error): dispatchQueue.async { completionHandler(.failure(error), httpResponse) } } } } /// Gets the list of chat threads of a user. /// - Parameters: /// - options: A list of options for the operation /// - completionHandler: A completion handler that receives a status code on /// success. internal func listChatThreads( withOptions options: ListChatThreadsOptions? = nil, completionHandler: @escaping HTTPResultHandler<PagedCollection<ChatThreadItem>> ) { let dispatchQueue = options?.dispatchQueue ?? client.commonOptions.dispatchQueue ?? DispatchQueue.main // Create request parameters let params = RequestParameters( (.query, "maxPageSize", options?.maxPageSize, .encode), (.query, "startTime", options?.startTime, .encode), (.uri, "endpoint", client.endpoint.absoluteString, .skipEncoding), (.query, "api-version", client.options.apiVersion, .encode), (.header, "Accept", "application/json", .encode) ) // Construct request let urlTemplate = "/chat/threads" guard let requestUrl = client.url(host: "{endpoint}", template: urlTemplate, params: params), let request = try? HTTPRequest(method: .get, url: requestUrl, headers: params.headers) else { client.options.logger.error("Failed to construct HTTP request.") return } // Send request let context = PipelineContext.of(keyValues: [ ContextKey.allowedStatusCodes.rawValue: [200, 401, 403, 429, 503] as AnyObject ]) context.add(cancellationToken: options?.cancellationToken, applying: client.options) context.merge(with: options?.context) client.request(request, context: context) { result, httpResponse in guard let data = httpResponse?.data else { let noDataError = AzureError.client("Response data expected but not found.") dispatchQueue.async { completionHandler(.failure(noDataError), httpResponse) } return } switch result { case .success: guard let statusCode = httpResponse?.statusCode else { let noStatusCodeError = AzureError.client("Expected a status code in response but didn't find one.") dispatchQueue.async { completionHandler(.failure(noStatusCodeError), httpResponse) } return } if [ 200 ].contains(statusCode) { do { let decoder = JSONDecoder() let codingKeys = PagedCodingKeys( items: "value", continuationToken: "nextLink" ) let paged = try PagedCollection<ChatThreadItem>( client: self.client, request: request, context: context, data: data, codingKeys: codingKeys, decoder: decoder ) dispatchQueue.async { completionHandler(.success(paged), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [401].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Unauthorized.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [403].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Forbidden.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [429].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Too many requests.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [503].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler( .failure(AzureError.service("Service unavailable.", decoded)), httpResponse ) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } case let .failure(error): dispatchQueue.async { completionHandler(.failure(error), httpResponse) } } } } /// Deletes a thread. /// - Parameters: /// - chatThreadId : Id of the thread to be deleted. /// - options: A list of options for the operation /// - completionHandler: A completion handler that receives a status code on /// success. internal func deleteChatThread( chatThreadId: String, withOptions options: DeleteChatThreadOptions? = nil, completionHandler: @escaping HTTPResultHandler<Void> ) { let dispatchQueue = options?.dispatchQueue ?? client.commonOptions.dispatchQueue ?? DispatchQueue.main // Create request parameters let params = RequestParameters( (.path, "chatThreadId", chatThreadId, .encode), (.uri, "endpoint", client.endpoint.absoluteString, .skipEncoding), (.query, "api-version", client.options.apiVersion, .encode), (.header, "Accept", "application/json", .encode) ) // Construct request let urlTemplate = "/chat/threads/{chatThreadId}" guard let requestUrl = client.url(host: "{endpoint}", template: urlTemplate, params: params), let request = try? HTTPRequest(method: .delete, url: requestUrl, headers: params.headers) else { client.options.logger.error("Failed to construct HTTP request.") return } // Send request let context = PipelineContext.of(keyValues: [ ContextKey.allowedStatusCodes.rawValue: [204, 401, 403, 429, 503] as AnyObject ]) context.add(cancellationToken: options?.cancellationToken, applying: client.options) context.merge(with: options?.context) client.request(request, context: context) { result, httpResponse in guard let data = httpResponse?.data else { let noDataError = AzureError.client("Response data expected but not found.") dispatchQueue.async { completionHandler(.failure(noDataError), httpResponse) } return } switch result { case .success: guard let statusCode = httpResponse?.statusCode else { let noStatusCodeError = AzureError.client("Expected a status code in response but didn't find one.") dispatchQueue.async { completionHandler(.failure(noStatusCodeError), httpResponse) } return } if [ 204 ].contains(statusCode) { dispatchQueue.async { completionHandler( .success(()), httpResponse ) } } if [401].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Unauthorized.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [403].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Forbidden.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [429].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler(.failure(AzureError.service("Too many requests.", decoded)), httpResponse) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } if [503].contains(statusCode) { do { let decoder = JSONDecoder() let decoded = try decoder.decode(CommunicationErrorResponse.self, from: data) dispatchQueue.async { completionHandler( .failure(AzureError.service("Service unavailable.", decoded)), httpResponse ) } } catch { dispatchQueue.async { completionHandler(.failure(AzureError.client("Decoding error.", error)), httpResponse) } } } case let .failure(error): dispatchQueue.async { completionHandler(.failure(error), httpResponse) } } } } }