diff --git a/Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift b/Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift index ac8530f..f5aeabc 100644 --- a/Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift +++ b/Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift @@ -209,7 +209,11 @@ extension _StructuredFieldEncoder: Encoder { } func unkeyedContainer() -> UnkeyedEncodingContainer { - StructuredFieldUnkeyedEncodingContainer(encoder: self) + if case .itemOrInnerList(let params) = self.currentStackEntry.storage { + // This is an inner list, even if nothing is ever appended to it. + self.currentStackEntry.storage = .innerList(InnerList(bareInnerList: [], parameters: params)) + } + return StructuredFieldUnkeyedEncodingContainer(encoder: self) } func singleValueContainer() -> SingleValueEncodingContainer { diff --git a/Tests/StructuredFieldValuesTests/StructuredFieldEncoderTests.swift b/Tests/StructuredFieldValuesTests/StructuredFieldEncoderTests.swift index a6ce1b8..4e17ce3 100644 --- a/Tests/StructuredFieldValuesTests/StructuredFieldEncoderTests.swift +++ b/Tests/StructuredFieldValuesTests/StructuredFieldEncoderTests.swift @@ -310,6 +310,17 @@ final class StructuredFieldEncoderTests: XCTestCase { XCTAssertEqual(Array("(1 2 3), (4 5 6)".utf8), try encoder.encode(List(header))) } + func testEmptyInnerListsBare() throws { + struct DictionaryField: StructuredFieldValue { + static let structuredFieldType: StructuredFieldType = .dictionary + var x: [Int] + } + + let encoder = StructuredFieldValueEncoder() + XCTAssertEqual(Array("(), (1 2 3), ()".utf8), try encoder.encode(List([[], [1, 2, 3], []]))) + XCTAssertEqual(Array("x=()".utf8), try encoder.encode(DictionaryField(x: []))) + } + func testListFieldInnerListsParameters() throws { struct Integers: Equatable, Codable { var items: [Int]