summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadREST/Rust/RustProblemReportRequest.swift
diff options
context:
space:
mode:
Diffstat (limited to 'ios/MullvadREST/Rust/RustProblemReportRequest.swift')
-rw-r--r--ios/MullvadREST/Rust/RustProblemReportRequest.swift57
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()
+ }
+}