// // 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 "" } }.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) } }