in Sources/StructuredFieldValues/Encoder/StructuredFieldValueEncoder.swift [780:843]
mutating func insert(_ childData: NodeType, atKey key: _StructuredHeaderCodingKey) throws {
// Only some things can be inside other things, and often that relies on
// the specifics of the key.
switch (self, childData) {
case (.item(var item), .parameters(let params)) where key.stringValue == "parameters":
// Oh cool, parameters. Love it. Save it.
item.parameters = params
self = .item(item)
case (.innerList(var list), .parameters(let params)) where key.stringValue == "parameters":
list.parameters = params
self = .innerList(list)
case (.innerList(var list), .bareInnerList(let bare)) where key.stringValue == "items":
list.bareInnerList = bare
self = .innerList(list)
case (.innerList(var list), .item(let item)) where key.intValue != nil:
list.bareInnerList.append(Item(item))
self = .innerList(list)
case (.bareInnerList(var list), .item(let item)):
precondition(key.intValue == list.count)
list.append(Item(item))
self = .bareInnerList(list)
case (.itemOrInnerList, .parameters(let params)) where key.stringValue == "parameters":
self = .itemOrInnerList(params)
case (.itemOrInnerList, .item(let item)):
self = .item(item)
case (.itemOrInnerList, .innerList(let list)):
self = .innerList(list)
case (.dictionary(var map), .innerList(let innerList)):
map[key.stringValue] = .innerList(innerList)
self = .dictionary(map)
case (.dictionary(var map), .item(let item)):
map[key.stringValue] = .item(Item(item))
self = .dictionary(map)
case (.listHeader, .list(let list)) where key.stringValue == "items":
self = .list(list)
case (.listHeader, .innerList(let innerList)) where key.intValue != nil:
self = .list([.innerList(innerList)])
case (.listHeader, .item(let item)) where key.intValue != nil:
self = .list([.item(Item(item))])
case (.list(var list), .innerList(let innerList)) where key.intValue != nil:
list.append(.innerList(innerList))
self = .list(list)
case (.list(var list), .item(let item)) where key.intValue != nil:
list.append(.item(Item(item)))
self = .list(list)
default:
throw StructuredHeaderError.invalidTypeForItem
}
}