                 // The Attribute Protocol Read By Type Request is used to perform the sub-procedure.
                 // The Attribute Type is set to the known characteristic UUID and the Starting Handle and Ending Handle parameters
                 // shall be set to the range over which this read is to be performed. This is typically the handle range for the service in which the characteristic belongs.
-                let request = ATTReadByTypeRequest(
-                    startHandle: handleRange.start,
-                    endHandle: handleRange.end,
-                    attributeType: uuid
-                )
-                let operation = ReadUsingUUIDOperation(uuid: uuid) { result in
-                    continuation.resume(with: result)
+                do {
+                    let request = ATTReadByTypeRequest(
+                        startHandle: handleRange.start,
+                        endHandle: handleRange.end,
+                        attributeType: uuid
+                    )
+                    let operation = ReadUsingUUIDOperation(uuid: uuid) { result in
+                        continuation.resume(with: result)
+                    }
+                    let response = try await send(request, response: ATTReadByTypeResponse.self)
+                    readByTypeResponse(response, operation: operation)
+                } catch {
+                    assert(error as? ATTErrorResponse == nil)
+                    continuation.resume(throwing: error)
                 }
-                let response = try await send(request, response: ATTReadByTypeResponse.self)
-                readByTypeResponse(response, operation: operation)
             }
         }
     }

     
     Uses the appropriate procecedure to write the characteristic value.
     */
    public func writeCharacteristic(_ characteristic: Characteristic,
                                    data: Data,
                                    reliableWrites: Bool = true,
                                    completion: ((GATTClientResponse<()>) -> ())?) {
        
        writeAttribute(characteristic.handle.value,
                       data: data,
                       reliableWrites: reliableWrites,
                       completion: completion)
    }
    
    /**

    final class DescriptorDiscoveryOperation {
        
        var start: UInt16 {
            didSet { assert(start <= end, "Start Handle should always be less than or equal to End handle") }
        }
        
