shithub: nineswift

ref: 960f567d8fa9d3a294e9b2c081f4eede5108b5d0
dir: /Sources/NineSwift/Queue.swift/

View raw version
//
//  Queue.swift
//
//  Created by halfwit on 2024-01-22.
//
import Foundation
import Network

public struct Queue<T> {
    private var elements: [T] = []
    
    mutating func enqueue(_ value: T) {
        elements.append(value)
    }
    
    mutating func dequeue() -> T? {
        guard !elements.isEmpty else {
            return nil
        }
        return elements.removeFirst()
    }
    
    var size: Int {
        get {
            return elements.count
        }
    }
}

@available(macOS 10.15, *)
public protocol QueueableMessage {
    var encodedData: Data {get}
    var minReceiveLength: Int {get}
    var context: NWConnection.ContentContext {get}
}

@available(macOS 10.15, *)
public struct Enqueued {
    let message: QueueableMessage
    let action: (NWProtocolFramer.Message, Data?, NWError?) -> Void
    init(message: QueueableMessage, action: @escaping (NWProtocolFramer.Message, Data?, NWError?) -> Void) {
        self.message = message
        self.action = action
    }
}