File: EnvironmentKey.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 (104 lines) | stat: -rw-r--r-- 2,869 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
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift open source project
//
// Copyright (c) 2024 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
//
//===----------------------------------------------------------------------===//

/// A key used to access values in an ``Environment``.
///
/// This type respects the compiled platform's case sensitivity requirements.
public struct EnvironmentKey {
    public var rawValue: String

    package init(_ rawValue: String) {
        self.rawValue = rawValue
    }
}

extension EnvironmentKey {
    package static let path: Self = "PATH"

    /// A set of known keys which should not be included in cache keys.
    package static let nonCachable: Set<Self> = [
        "TERM",
        "TERM_PROGRAM",
        "TERM_PROGRAM_VERSION",
        "TERM_SESSION_ID",
        "ITERM_PROFILE",
        "ITERM_SESSION_ID",
        "SECURITYSESSIONID",
        "LaunchInstanceID",
        "LC_TERMINAL",
        "LC_TERMINAL_VERSION",
        "CLICOLOR",
        "LS_COLORS",
        "VSCODE_IPC_HOOK_CLI",
        "HYPERFINE_RANDOMIZED_ENVIRONMENT_OFFSET",
        "SSH_AUTH_SOCK",
    ]
}

extension EnvironmentKey: CodingKeyRepresentable {}

extension EnvironmentKey: Comparable {
    public static func < (lhs: Self, rhs: Self) -> Bool {
        // Even on windows use a stable sort order.
        lhs.rawValue < rhs.rawValue
    }
}

extension EnvironmentKey: CustomStringConvertible {
    public var description: String { self.rawValue }
}

extension EnvironmentKey: Encodable {
    public func encode(to encoder: any Encoder) throws {
        try self.rawValue.encode(to: encoder)
    }
}

extension EnvironmentKey: Equatable {
    public static func == (_ lhs: Self, _ rhs: Self) -> Bool {
        #if os(Windows)
        lhs.rawValue.lowercased() == rhs.rawValue.lowercased()
        #else
        lhs.rawValue == rhs.rawValue
        #endif
    }
}

extension EnvironmentKey: ExpressibleByStringLiteral {
    public init(stringLiteral rawValue: String) {
        self.init(rawValue)
    }
}

extension EnvironmentKey: Decodable {
    public init(from decoder: any Decoder) throws {
        self.rawValue = try String(from: decoder)
    }
}

extension EnvironmentKey: Hashable {
    public func hash(into hasher: inout Hasher) {
        #if os(Windows)
        self.rawValue.lowercased().hash(into: &hasher)
        #else
        self.rawValue.hash(into: &hasher)
        #endif
    }
}

extension EnvironmentKey: RawRepresentable {
    public init?(rawValue: String) {
        self.rawValue = rawValue
    }
}

extension EnvironmentKey: Sendable {}