File: URL_Protocol.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 (102 lines) | stat: -rw-r--r-- 4,526 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
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2025 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 the list of Swift project authors
//
//===----------------------------------------------------------------------===//

#if FOUNDATION_FRAMEWORK
/// In `FOUNDATION_FRAMEWORK`, the inner class types of `struct URL` conform to this protocol.
/// Outside `FOUNDATION_FRAMEWORK`, only `_SwiftURL` is used, so the protocol is not needed.
/// - `class _SwiftURL` is the new Swift implementation for a true Swift `URL`.
/// - `class _BridgedURL` wraps the old `NSURL` implementation, which is used for custom `NSURL` subclasses that are bridged to Swift.
/// - `class _BridgedNSSwiftURL` wraps a `_NSSwiftURL` (Swift subclass/implementation for `NSURL`) to maintain pointers when bridging.
/// - Note: Except for `baseURL`, a nil `URL?` return value means that `struct URL` will return `self`.
internal protocol _URLProtocol: AnyObject, Sendable {
    init?(string: String)
    init?(string: String, relativeTo url: URL?)
    init?(string: String, encodingInvalidCharacters: Bool)
    init?(stringOrEmpty: String, relativeTo url: URL?)

    init(fileURLWithPath path: String, isDirectory: Bool, relativeTo base: URL?)
    init(fileURLWithPath path: String, relativeTo base: URL?)
    init(fileURLWithPath path: String, isDirectory: Bool)
    init(fileURLWithPath path: String)
    init(filePath path: String, directoryHint: URL.DirectoryHint, relativeTo base: URL?)

    init?(dataRepresentation: Data, relativeTo base: URL?, isAbsolute: Bool)
    init(fileURLWithFileSystemRepresentation path: UnsafePointer<Int8>, isDirectory: Bool, relativeTo base: URL?)

    var dataRepresentation: Data { get }
    var relativeString: String { get }
    var absoluteString: String { get }
    var baseURL: URL? { get }
    var absoluteURL: URL? { get }

    var scheme: String? { get }
    var isFileURL: Bool { get }
    var hasAuthority: Bool { get }

    var user: String? { get }
    func user(percentEncoded: Bool) -> String?

    var password: String? { get }
    func password(percentEncoded: Bool) -> String?

    var host: String? { get }
    func host(percentEncoded: Bool) -> String?

    var port: Int? { get }

    var relativePath: String { get }
    func relativePath(percentEncoded: Bool) -> String
    func absolutePath(percentEncoded: Bool) -> String
    var path: String { get }
    func path(percentEncoded: Bool) -> String

    var query: String? { get }
    func query(percentEncoded: Bool) -> String?

    var fragment: String? { get }
    func fragment(percentEncoded: Bool) -> String?

    func fileSystemPath(style: URL.PathStyle, resolveAgainstBase: Bool, compatibility: Bool) -> String
    func withUnsafeFileSystemRepresentation<ResultType>(_ block: (UnsafePointer<Int8>?) throws -> ResultType) rethrows -> ResultType

    var hasDirectoryPath: Bool { get }
    var pathComponents: [String] { get }
    var lastPathComponent: String { get }
    var pathExtension: String { get }

    func appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -> URL?
    func appendingPathComponent(_ pathComponent: String) -> URL?
    func appending<S: StringProtocol>(path: S, directoryHint: URL.DirectoryHint) -> URL?
    func appending<S: StringProtocol>(component: S, directoryHint: URL.DirectoryHint) -> URL?
    func deletingLastPathComponent() -> URL?
    func appendingPathExtension(_ pathExtension: String) -> URL?
    func deletingPathExtension() -> URL?
    var standardized: URL? { get }

#if !NO_FILESYSTEM
    var standardizedFileURL: URL? { get }
    func resolvingSymlinksInPath() -> URL?
#endif

    var description: String { get }
    var debugDescription: String { get }

    func bridgeToNSURL() -> NSURL
    func isFileReferenceURL() -> Bool

    /// We must not store a `_URLProtocol` in `URL` without running it through this function.
    /// This makes sure that we do not hold a file reference URL, which changes the nullability of many functions.
    /// - Note: File reference URL here is not the same as playground's "file reference".
    /// - Note: This is a no-op `#if !FOUNDATION_FRAMEWORK`.
    func convertingFileReference() -> any _URLProtocol & AnyObject
}
#endif // FOUNDATION_FRAMEWORK