@@ -5,30 +5,40 @@ public struct Item: Sendable, XMLElementCodable {
55 public var objectID : ResourceID
66 public var transform : Matrix3D ?
77 public var partNumber : String ?
8- public var printable : Bool ? // Prusa extension
98 public var metadata : [ Metadata ]
9+ public var customAttributes : [ ExpandedName : String ]
1010
11- public init ( objectID: ResourceID , transform: Matrix3D ? = nil , partNumber: String ? = nil , metadata: [ Metadata ] = [ ] , printable: Bool ? = nil ) {
11+ public init (
12+ objectID: ResourceID ,
13+ transform: Matrix3D ? = nil ,
14+ partNumber: String ? = nil ,
15+ metadata: [ Metadata ] = [ ] ,
16+ customAttributes: [ ExpandedName : String ] = [ : ]
17+ ) {
1218 self . objectID = objectID
1319 self . transform = transform
1420 self . partNumber = partNumber
1521 self . metadata = metadata
16- self . printable = printable
22+ self . customAttributes = customAttributes
1723 }
1824
1925 public func encode( to element: Node ) {
2026 element. setValue ( objectID, forAttribute: . objectID)
2127 element. setValue ( transform, forAttribute: . transform)
2228 element. setValue ( partNumber, forAttribute: . partNumber)
23- element. setValue ( printable, forAttribute: . printable)
2429 element. encode ( metadata, elementName: Core . metadata, containedIn: Core . metadataGroup)
30+ for (name, value) in customAttributes {
31+ element. setValue ( value, forAttribute: name)
32+ }
2533 }
2634
2735 public init ( from element: Node ) throws {
2836 objectID = try element. value ( forAttribute: . objectID)
2937 transform = try element. value ( forAttribute: . transform)
3038 partNumber = try element. value ( forAttribute: . partNumber)
31- printable = try element. value ( forAttribute: . printable)
3239 metadata = try element. decode ( elementName: Core . metadata, containedIn: Core . metadataGroup)
40+
41+ let knownAttributes : Set < ExpandedName > = [ . objectID, . transform, . partNumber, Core . metadataGroup]
42+ customAttributes = element. namespacedAttributes. filter { !knownAttributes. contains ( $0. key) }
3343 }
3444}
0 commit comments