63 lines
1.6 KiB
Swift
63 lines
1.6 KiB
Swift
|
//
|
||
|
// Endpoint.swift
|
||
|
// Pachyderm
|
||
|
//
|
||
|
// Created by Shadowfacts on 3/29/22.
|
||
|
// Copyright © 2022 Shadowfacts. All rights reserved.
|
||
|
//
|
||
|
|
||
|
import Foundation
|
||
|
|
||
|
public struct Endpoint: ExpressibleByStringInterpolation, CustomStringConvertible {
|
||
|
let components: [Component]
|
||
|
|
||
|
public init(stringLiteral value: StringLiteralType) {
|
||
|
self.components = [.literal(value)]
|
||
|
}
|
||
|
|
||
|
public init(stringInterpolation: StringInterpolation) {
|
||
|
self.components = stringInterpolation.components
|
||
|
}
|
||
|
|
||
|
var path: String {
|
||
|
components.map {
|
||
|
switch $0 {
|
||
|
case .literal(let s), .interpolated(let s):
|
||
|
return s
|
||
|
}
|
||
|
}.joined(separator: "")
|
||
|
}
|
||
|
|
||
|
public var description: String {
|
||
|
components.map {
|
||
|
switch $0 {
|
||
|
case .literal(let s):
|
||
|
return s
|
||
|
case .interpolated(_):
|
||
|
return "<redacted>"
|
||
|
}
|
||
|
}.joined(separator: "")
|
||
|
}
|
||
|
|
||
|
public struct StringInterpolation: StringInterpolationProtocol {
|
||
|
var components = [Component]()
|
||
|
|
||
|
public init(literalCapacity: Int, interpolationCount: Int) {
|
||
|
}
|
||
|
|
||
|
public mutating func appendLiteral(_ literal: StringLiteralType) {
|
||
|
components.append(.literal(literal))
|
||
|
}
|
||
|
|
||
|
public mutating func appendInterpolation(_ value: String) {
|
||
|
components.append(.interpolated(value))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
enum Component {
|
||
|
case literal(String)
|
||
|
case interpolated(String)
|
||
|
}
|
||
|
|
||
|
}
|