in Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift [450:508]
func append<T>(_ value: T) throws where T: Encodable {
switch value {
case let value as UInt8:
try self.append(value)
case let value as Int8:
try self.append(value)
case let value as UInt16:
try self.append(value)
case let value as Int16:
try self.append(value)
case let value as UInt32:
try self.append(value)
case let value as Int32:
try self.append(value)
case let value as UInt64:
try self.append(value)
case let value as Int64:
try self.append(value)
case let value as Int:
try self.append(value)
case let value as UInt:
try self.append(value)
case let value as Float:
try self.append(value)
case let value as Double:
try self.append(value)
case let value as String:
try self.append(value)
case let value as Bool:
try self.append(value)
case let value as Data:
try self.append(value)
case let value as Decimal:
try self.append(value)
default:
// Some other codable type.
switch self.currentStackEntry.storage {
case .listHeader, .list:
// This may be an item or inner list.
self.push(key: .init(intValue: self.count), newStorage: .itemOrInnerList([:]))
try value.encode(to: self)
try self.pop()
case .itemOrInnerList(let params):
// This is an inner list.
self.currentStackEntry.storage = .innerList(InnerList(bareInnerList: [], parameters: params))
fallthrough
case .innerList, .bareInnerList:
// This may only be an item.
self.push(key: .init(intValue: self.count), newStorage: .item(.init(bareItem: nil, parameters: [:])))
try value.encode(to: self)
try self.pop()
case .dictionaryHeader, .dictionary, .itemHeader, .item, .parameters:
throw StructuredHeaderError.invalidTypeForItem
}
}
}