1
0
Эх сурвалжийг харах

(refactor) slightly cleaner file descriptor usage

Michael Redig 2 жил өмнө
parent
commit
3246d96dc2

+ 1 - 0
Sources/PortError.swift

@@ -8,4 +8,5 @@ public enum PortError: Int32, Error {
 	case stringsMustBeUTF8
 	case unableToConvertByteToCharacter
 	case deviceNotConnected
+	case instanceAlreadyOpen
 }

+ 10 - 16
Sources/SerialPort.swift

@@ -4,6 +4,8 @@ public class SerialPort {
 	var path: String
 	var fileDescriptor: Int32?
 
+	private var isOpen: Bool { fileDescriptor != nil }
+
 	private var pollSource: DispatchSourceRead?
 	private var readDataStream: AsyncStream<Data>?
 	private var readBytesStream: AsyncStream<UInt8>?
@@ -18,13 +20,10 @@ public class SerialPort {
 	}
 
 	public func openPort(toReceive receive: Bool, andTransmit transmit: Bool) throws {
-		guard !path.isEmpty else {
-			throw PortError.invalidPath
-		}
+		guard !path.isEmpty else { throw PortError.invalidPath }
+		guard isOpen == false else { throw PortError.instanceAlreadyOpen }
 
-		guard receive || transmit else {
-			throw PortError.mustReceiveOrTransmit
-		}
+		guard receive || transmit else { throw PortError.mustReceiveOrTransmit }
 
 		var readWriteParam : Int32
 
@@ -86,9 +85,9 @@ public class SerialPort {
 		useHardwareFlowControl: Bool = false,
 		useSoftwareFlowControl: Bool = false,
 		processOutput: Bool = false
-	) {
+	) throws {
 		guard let fileDescriptor = fileDescriptor else {
-			return
+			throw PortError.mustBeOpen
 		}
 
 		// Set up the control structure
@@ -314,7 +313,7 @@ extension SerialPort {
 
 	public func asyncData() throws -> AsyncStream<Data> {
 		guard
-			fileDescriptor != nil,
+			isOpen,
 			let readDataStream
 		else {
 			throw PortError.mustBeOpen
@@ -325,7 +324,7 @@ extension SerialPort {
 
 	public func asyncBytes() throws -> AsyncStream<UInt8> {
 		guard
-			fileDescriptor != nil,
+			isOpen,
 			let readDataStream
 		else {
 			throw PortError.mustBeOpen
@@ -350,11 +349,7 @@ extension SerialPort {
 	}
 
 	public func asyncLines() throws -> AsyncStream<String> {
-		guard
-			fileDescriptor != nil
-		else {
-			throw PortError.mustBeOpen
-		}
+		guard isOpen else { throw PortError.mustBeOpen }
 
 		if let existing = readLinesStream {
 			return existing
@@ -391,7 +386,6 @@ extension SerialPort {
 // MARK: Transmitting
 
 extension SerialPort {
-
 	public func writeBytes(from buffer: UnsafeMutablePointer<UInt8>, size: Int) throws -> Int {
 		guard let fileDescriptor = fileDescriptor else {
 			throw PortError.mustBeOpen