func append()

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
            }
        }
    }