// // RustProblemReportRequest.swift // MullvadVPN // // Created by Mojgan on 2025-03-21. // Copyright © 2025 Mullvad VPN AB. All rights reserved. // import MullvadLogging import MullvadTypes final public class RustProblemReportRequest { private let logger = Logger(label: "RustProblemReportRequest") private let addressPointer: UnsafePointer? private let messagePointer: UnsafePointer? private let logPointer: UnsafePointer? private let problemReportMetaData: ProblemReportMetadata public init(from request: ProblemReportRequest) { self.problemReportMetaData = swift_problem_report_metadata_new() self.addressPointer = request.address.toCStringPointer() self.messagePointer = request.message.toCStringPointer() self.logPointer = request.log.toCStringPointer() for (key, value) in request.metadata { let isAdded = swift_problem_report_metadata_add(problemReportMetaData, key, value) if !isAdded { logger .error("Failed to add metadata. Key: '\(key)' might be invalid or contain unsupported characters.") } } } public func toRust() -> SwiftProblemReportRequest { SwiftProblemReportRequest( address: addressPointer, message: messagePointer, log: logPointer, metadata: problemReportMetaData ) } deinit { swift_problem_report_metadata_free(problemReportMetaData) addressPointer?.deallocate() messagePointer?.deallocate() logPointer?.deallocate() } }