File: OutOfProcessLinkResolverOption.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 (44 lines) | stat: -rw-r--r-- 1,838 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
/*
 This source file is part of the Swift.org open source project

 Copyright (c) 2021 Apple Inc. and the Swift project authors
 Licensed under Apache License v2.0 with Runtime Library Exception

 See https://swift.org/LICENSE.txt for license information
 See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/

import ArgumentParser
import Foundation

/// Resolves and validates a link resolve executable URL that points to a link resolver executable.
///
/// This value can be is set via an environment variable.
public struct OutOfProcessLinkResolverOption: ParsableArguments {

    public init() {}

    /// The environment variable key that can be used to set the ``linkResolverExecutableURL`` property.
    private static let environmentVariableKey = "DOCC_LINK_RESOLVER_EXECUTABLE"

    /// The path to an executable to be used during link resolution as provided by
    /// the environment variable `DOCC_LINK_RESOLVER_EXECUTABLE`.
    var linkResolverExecutableURL: URL? {
        ProcessInfo.processInfo.environment[OutOfProcessLinkResolverOption.environmentVariableKey]
            .map { URL(fileURLWithPath: $0, isDirectory: false) }
    }

    public mutating func validate() throws {
        // If the user-provided an explicit link resolver URL, first validate that it exists,
        // and then that it is executable
        try URLArgumentValidator.validateFileExists(linkResolverExecutableURL,
            forArgumentDescription: """
            '\(OutOfProcessLinkResolverOption.environmentVariableKey)' environment variable")
            """)
        
        try URLArgumentValidator.validateIsExecutableFile(linkResolverExecutableURL,
            forArgumentDescription: """
                '\(OutOfProcessLinkResolverOption.environmentVariableKey)' environment variable")
                """)
    }
}