File: CustomTask.swift

package info (click to toggle)
swiftlang 6.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,856,264 kB
  • sloc: cpp: 9,995,718; ansic: 2,234,019; asm: 1,092,167; python: 313,940; objc: 82,726; f90: 80,126; lisp: 38,373; pascal: 25,580; sh: 20,378; ml: 5,058; perl: 4,751; makefile: 4,725; awk: 3,535; javascript: 3,018; xml: 918; fortran: 664; cs: 573; ruby: 396
file content (75 lines) | stat: -rw-r--r-- 4,029 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
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2025 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
//
//===----------------------------------------------------------------------===//

public import SWBUtil

public struct CustomTask: SerializableCodable, Sendable {
    public let commandLine: [MacroExpressionSource]
    public let environment: [(MacroExpressionSource, MacroExpressionSource)]
    public let workingDirectory: MacroExpressionSource
    public let executionDescription: MacroExpressionSource
    public let inputFilePaths: [MacroExpressionSource]
    public let outputFilePaths: [MacroExpressionSource]
    public let enableSandboxing: Bool
    public let preparesForIndexing: Bool

    public init(commandLine: [MacroExpressionSource], environment: [(MacroExpressionSource, MacroExpressionSource)], workingDirectory: MacroExpressionSource, executionDescription: MacroExpressionSource, inputFilePaths: [MacroExpressionSource], outputFilePaths: [MacroExpressionSource], enableSandboxing: Bool, preparesForIndexing: Bool) {
        self.commandLine = commandLine
        self.environment = environment
        self.workingDirectory = workingDirectory
        self.executionDescription = executionDescription
        self.inputFilePaths = inputFilePaths
        self.outputFilePaths = outputFilePaths
        self.enableSandboxing = enableSandboxing
        self.preparesForIndexing = preparesForIndexing
    }
    
    enum CodingKeys: CodingKey {
        case commandLine
        case environmentVars
        case environmentValues
        case workingDirectory
        case executionDescription
        case inputFilePaths
        case outputFilePaths
        case enableSandboxing
        case preparesForIndexing
    }
    
    public func encode(to encoder: any Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(self.commandLine, forKey: .commandLine)
        try container.encode(environment.map(\.0), forKey: .environmentVars)
        try container.encode(environment.map(\.1), forKey: .environmentValues)
        try container.encode(workingDirectory, forKey: .workingDirectory)
        try container.encode(executionDescription, forKey: .executionDescription)
        try container.encode(inputFilePaths, forKey: .inputFilePaths)
        try container.encode(outputFilePaths, forKey: .outputFilePaths)
        try container.encode(enableSandboxing, forKey: .enableSandboxing)
        try container.encode(preparesForIndexing, forKey: .preparesForIndexing)
    }
    
    public init(from decoder: any Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        self.commandLine = try container.decode([MacroExpressionSource].self, forKey: .commandLine)
        let environmentVars = try container.decode([MacroExpressionSource].self, forKey: .environmentVars)
        let environmentValues = try container.decode([MacroExpressionSource].self, forKey: .environmentValues)
        self.environment = Array(zip(environmentVars, environmentValues))
        self.workingDirectory = try container.decode(MacroExpressionSource.self, forKey: .workingDirectory)
        self.executionDescription = try container.decode(MacroExpressionSource.self, forKey: .executionDescription)
        self.inputFilePaths = try container.decode([MacroExpressionSource].self, forKey: .inputFilePaths)
        self.outputFilePaths = try container.decode([MacroExpressionSource].self, forKey: .outputFilePaths)
        self.enableSandboxing = try container.decode(Bool.self, forKey: .enableSandboxing)
        self.preparesForIndexing = try container.decode(Bool.self, forKey: .preparesForIndexing)
    }
}