this repo has no description
at main 64 lines 1.9 kB view raw
1// 2// DecodingContainer.swift 3// URLQueryItemCoder 4// 5// Created by Kyle Hughes on 1/19/23. 6// 7 8import Foundation 9 10internal enum DecodingContainer<PrimitiveValue> where PrimitiveValue: DecodingPrimitiveValue { 11 case multiValue(MultiValue) 12 case singleValue(SingleValue) 13 14 // MARK: Internal Static Interface 15 16 @inlinable 17 internal static func empty( 18 at codingPath: [any CodingKey], 19 using configuration: DecodingStrategies 20 ) -> Self { 21 .multiValue(at: codingPath, using: configuration) 22 } 23 24 @inlinable 25 internal static func multiValue( 26 at codingPath: [any CodingKey], 27 using configuration: DecodingStrategies 28 ) -> Self { 29 .multiValue(MultiValue(codingPath: codingPath, configuration: configuration)) 30 } 31 32 @inlinable 33 internal static func singleValue( 34 at codingPath: [any CodingKey], 35 using configuration: DecodingStrategies 36 ) -> Self { 37 .singleValue(SingleValue(codingPath: codingPath, configuration: configuration)) 38 } 39 40 // MARK: Internal Instance Interface 41 42 internal var configuration: DecodingStrategies { 43 switch self { 44 case let .multiValue(multiValueContainer): 45 return multiValueContainer.configuration 46 case let .singleValue(singleValueContainer): 47 return singleValueContainer.configuration 48 } 49 } 50 51 internal func expectedSingleValueContainer(at codingPath: [any CodingKey]) throws -> SingleValue { 52 switch self { 53 case .multiValue: 54 throw DecodingError.dataCorrupted( 55 DecodingError.Context( 56 codingPath: codingPath, 57 debugDescription: "Expected date to be encoded as a single value conatiner." 58 ) 59 ) 60 case let .singleValue(singleValueContainer): 61 return singleValueContainer 62 } 63 } 64}