         return name.hashValue ^ value.hashValue()
     }
 
+    // MARK: - NSCoding
+
+    public required convenience init?(coder aDecoder: NSCoder) {
+        guard let name = aDecoder.decodeObject(forKey: Keys.name) as? String,
+            let valueAsString = aDecoder.decodeObject(forKey: Keys.value) as? String?
+        else {
+            fatalError()
+        }
+
+        let value = Value(string: valueAsString)
+        self.init(name: name, value: value)
+    }
+
     // MARK: - Equatable
 
     static func ==(lhs: Attribute, rhs: Attribute) -> Bool {

    }
}

// MARK: - Attribute.Value

extension Attribute {

        case string(String)
        case inlineCss([CSSProperty])


        // MARK: - Constants

        static let cssPropertySeparator = "; "
