// Copyright © 2020 Australian Government All rights reserved. import Foundation let maxSummaryLength = 240 public struct Issue { let summary: String let description: String let components: [String] let type: String let customFields: [String: AnyObject] public init(summary: String, description: String, components: [String], type: String, customFields: [String: AnyObject] = [:], reporterUsernameOrEmail: String? = nil) { self.summary = summary self.description = description.withReporterUsernameOrEmailAppended(reporterUsernameOrEmail) self.components = components self.type = type self.customFields = customFields } public init(feedback: String, components: [String], type: String, customFields: [String: AnyObject] = [:], reporterUsernameOrEmail: String? = nil) { switch feedback.unicodeScalars.count { case let count where count > maxSummaryLength: let truncatedSummary = String(feedback.unicodeScalars.prefix(maxSummaryLength)) self.init( summary: truncatedSummary, description: feedback, components: components, type: type, customFields: customFields, reporterUsernameOrEmail: reporterUsernameOrEmail ) default: self.init( summary: feedback, description: feedback, components: components, type: type, customFields: customFields, reporterUsernameOrEmail: reporterUsernameOrEmail ) } } } extension String { fileprivate func withReporterUsernameOrEmailAppended(_ reporterUsernameOrEmail: String?) -> String { guard let reporterUsernameOrEmail = reporterUsernameOrEmail else { return self } return "\(self) \n\n Submitted by: \(reporterUsernameOrEmail)" } }