cueward-adapter-macos 0.5.0

macOS adapter for Cueward with Safari, Notes, Messages, Reminders, Calendar, Screenshot, Clipboard, and OCR integrations.
import ApplicationServices
import Foundation

enum AXElementsError: Error, CustomStringConvertible {
    case readFailed(AXError)
    case invalidValue

    var description: String {
        switch self {
        case .readFailed(let error): return "AX read failed (\(error.rawValue))"
        case .invalidValue: return "AX read returned an invalid element array"
        }
    }
}

func checkedElements(status: AXError, value: CFTypeRef?) throws -> [AXUIElement] {
    switch status {
    case .attributeUnsupported, .noValue:
        // Leaf elements may omit AXChildren entirely.
        return []
    case .success:
        guard let values = value as? [AnyObject],
              values.allSatisfy({ CFGetTypeID($0) == AXUIElementGetTypeID() }) else {
            throw AXElementsError.invalidValue
        }
        return values.map { $0 as! AXUIElement }
    default:
        throw AXElementsError.readFailed(status)
    }
}