summaryrefslogtreecommitdiffhomepage
path: root/ios/MullvadRustRuntime/RustProblemReportRequest.swift
blob: 677ced4dfb172afa42a5611dc7a82ea06e7df9e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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()
    }
}