diff options
Diffstat (limited to 'ios/MullvadRustRuntime/RustProblemReportRequest.swift')
| -rw-r--r-- | ios/MullvadRustRuntime/RustProblemReportRequest.swift | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/ios/MullvadRustRuntime/RustProblemReportRequest.swift b/ios/MullvadRustRuntime/RustProblemReportRequest.swift new file mode 100644 index 0000000000..677ced4dfb --- /dev/null +++ b/ios/MullvadRustRuntime/RustProblemReportRequest.swift @@ -0,0 +1,48 @@ +// +// 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<CChar>? + private let messagePointer: UnsafePointer<CChar>? + private let logPointer: UnsafePointer<CChar>? + 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() + } +} |
