         
         self.partAttributeValue = partAttributeValue
     }
+}
+
+public extension ATTReadBlobResponse {
     
     public init?(data: Data) {
         
-        guard data.count >= ATTReadBlobResponse.length
+        guard data.count >= 1
             else { return nil }
         
         let attributeOpcodeByte = data[0]

/// and contains part of the value of the attribute that has been read.
public struct ATTReadBlobResponse: ATTProtocolDataUnit, Equatable {
    
    public static let attributeOpcode = ATT.Opcode.readBlobResponse
    
    /// Minimum length
    internal static let length = 1 + 0
    
    /// Part of the value of the attribute with the handle given.
    ///

        guard attributeOpcodeByte == ATTReadBlobResponse.attributeOpcode.rawValue
            else { return nil }
        
        self.partAttributeValue = data.suffixCheckingBounds(from: 1)
    }
    
    public var data: Data {
        
        return Data(self)
    }
}

// MARK: - DataConvertible

extension ATTReadBlobResponse: DataConvertible {
    
    var dataLength: Int {
        
        return 1 + partAttributeValue.count
    }
    
    static func += (data: inout Data, value: ATTReadBlobResponse) {
        
        data += attributeOpcode.rawValue
        data += value.partAttributeValue
    }
}
