diff options
Diffstat (limited to 'ios/MullvadREST/Rust/RustProblemReportRequest.swift')
| -rw-r--r-- | ios/MullvadREST/Rust/RustProblemReportRequest.swift | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/ios/MullvadREST/Rust/RustProblemReportRequest.swift b/ios/MullvadREST/Rust/RustProblemReportRequest.swift new file mode 100644 index 0000000000..8bd8a4490f --- /dev/null +++ b/ios/MullvadREST/Rust/RustProblemReportRequest.swift @@ -0,0 +1,57 @@ +// +// RustProblemReportRequest.swift +// MullvadVPN +// +// Created by Mojgan on 2025-03-21. +// Copyright © 2025 Mullvad VPN AB. All rights reserved. +// +import MullvadLogging +import MullvadRustRuntime + +final public class RustProblemReportRequest { + typealias StringPointer = (pointer: UnsafePointer<UInt8>?, size: UInt)? + private let logger = Logger(label: "RustProblemReportRequest") + private let problemReportMetaData: ProblemReportMetadata + private let addressPointer: StringPointer + private let messagePointer: StringPointer + private let logPointer: StringPointer + public init(from request: REST.ProblemReportRequest) { + addressPointer = request.address.toUnsafePointer() + messagePointer = request.message.toUnsafePointer() + logPointer = request.log.toUnsafePointer() + + self.problemReportMetaData = swift_problem_report_meta_data_new() + + for (key, value) in request.metadata { + key.withCString { keyPtr in + value.withCString { valuePtr in + if swift_problem_report_meta_data_add(problemReportMetaData, keyPtr, valuePtr) == false { + logger + .error( + "Failed to add metadata. Key: '\(key)' might be invalid or contain unsupported characters." + ) + } + } + } + } + } + + public func toRust() -> SwiftProblemReportRequest { + return SwiftProblemReportRequest( + address: addressPointer?.pointer ?? nil, + address_len: addressPointer?.size ?? 0, + message: messagePointer?.pointer ?? nil, + message_len: messagePointer?.size ?? 0, + log: logPointer?.pointer ?? nil, + log_len: logPointer?.size ?? 0, + meta_data: problemReportMetaData + ) + } + + public func release() { + swift_problem_report_meta_data_free(problemReportMetaData) + addressPointer?.pointer?.deallocate() + messagePointer?.pointer?.deallocate() + logPointer?.pointer?.deallocate() + } +} |
