TM-SGNL-iOS/SignalServiceKit/Util/URLPathComponents.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

40 lines
984 B
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
public struct URLPathComponents: ExpressibleByArrayLiteral, Equatable {
private static var allowedCharacters: CharacterSet {
var result = CharacterSet.urlPathAllowed
result.remove("/")
return result
}
private let pathComponents: [String]
public init(_ pathComponents: [String]) {
self.pathComponents = pathComponents
}
public init(arrayLiteral: String...) {
self.pathComponents = arrayLiteral
}
public var percentEncoded: String {
pathComponents
.compactMap {
$0.nilIfEmpty?.addingPercentEncoding(withAllowedCharacters: Self.allowedCharacters)
}
.joined(separator: "/")
}
}
// MARK: - URL extension
public extension URL {
init?(pathComponents: URLPathComponents) {
self.init(string: pathComponents.percentEncoded)
}
}