File: MockTarget.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (108 lines) | stat: -rw-r--r-- 3,670 bytes parent folder | download
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2014-2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

import PackageGraph
import PackageModel

public struct MockTarget {
    public enum `Type` {
        case regular, test, binary
    }

    public let name: String
    public let dependencies: [TargetDescription.Dependency]
    public let path: String?
    public let url: String?
    public let checksum: String?
    public let packageAccess: Bool
    public let settings: [TargetBuildSettingDescription.Setting]
    public let type: Type

    public init(
        name: String,
        dependencies: [TargetDescription.Dependency] = [],
        type: Type = .regular,
        path: String? = nil,
        url: String? = nil,
        packageAccess: Bool = true,
        settings: [TargetBuildSettingDescription.Setting] = [],
        checksum: String? = nil
    ) throws {
        self.name = name
        self.dependencies = dependencies
        self.type = type
        self.path = path
        self.url = url
        self.packageAccess = packageAccess
        self.settings = settings
        self.checksum = checksum
    }

    func convert(identityResolver: IdentityResolver) throws -> TargetDescription {
        switch self.type {
        case .regular:
            return try TargetDescription(
                name: self.name,
                dependencies: self.dependencies.map{ try $0.convert(identityResolver: identityResolver) },
                path: self.path,
                exclude: [],
                sources: nil,
                publicHeadersPath: nil,
                type: .regular,
                packageAccess: packageAccess,
                settings: self.settings
            )
        case .test:
            return try TargetDescription(
                name: self.name,
                dependencies: self.dependencies.map{ try $0.convert(identityResolver: identityResolver) },
                path: self.path,
                exclude: [],
                sources: nil,
                publicHeadersPath: nil,
                type: .test,
                packageAccess: packageAccess,
                settings: self.settings
            )
        case .binary:
            return try TargetDescription(
                name: self.name,
                dependencies: self.dependencies.map{ try $0.convert(identityResolver: identityResolver) },
                path: self.path,
                url: self.url,
                exclude: [],
                sources: nil,
                publicHeadersPath: nil,
                type: .binary,
                packageAccess: packageAccess,
                settings: [],
                checksum: self.checksum
            )
        }
    }
}

extension TargetDescription.Dependency {
    func convert(identityResolver: IdentityResolver) throws -> Self {
        switch self {
        case .product(let name, let package, let moduleAliases, let condition):
            return .product(
                name: name,
                package: try package.flatMap { try identityResolver.mappedIdentity(for: .plain($0)).description },
                moduleAliases: moduleAliases,
                condition: condition
            )
        default:
            return self
        }
    }
}