this repo has no description
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}