mirror of
https://github.com/GayPizzaSpecifications/darwin-apk.git
synced 2025-08-03 13:31:32 +00:00
61 lines
1.4 KiB
Swift
61 lines
1.4 KiB
Swift
/*
|
|
* darwin-apk © 2024, 2025 Gay Pizza Specifications
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import Foundation
|
|
|
|
public enum ApkIndexProvides: Hashable, Sendable {
|
|
case any(name: String)
|
|
case specific(name: String, version: String)
|
|
}
|
|
|
|
extension ApkIndexProvides {
|
|
init(requirement: ApkVersionRequirement) throws(ProvidesError) {
|
|
self = switch requirement.versionSpec {
|
|
case .any(invert: false):
|
|
.any(name: requirement.name)
|
|
case .constraint(invert: false, op: .equals, let version):
|
|
.specific(name: requirement.name, version: version)
|
|
default:
|
|
throw .badConstraint
|
|
}
|
|
}
|
|
|
|
func satisfies(_ requirement: ApkVersionRequirement) -> Bool {
|
|
switch self {
|
|
case .any(let name):
|
|
return requirement.name == name
|
|
case .specific(let name, let version):
|
|
return requirement.name == name &&
|
|
requirement.versionSpec.satisfied(by: version)
|
|
}
|
|
}
|
|
|
|
enum ProvidesError: Error, LocalizedError {
|
|
case badConstraint
|
|
|
|
var errorDescription: String? {
|
|
switch self {
|
|
case .badConstraint: "Invalid constraint type, must only be equals"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension ApkIndexProvides: CustomStringConvertible {
|
|
public var description: String {
|
|
switch self {
|
|
case .any(let name): name
|
|
case .specific(let name, let version): "\(name)=\(version)"
|
|
}
|
|
}
|
|
|
|
public var name: String {
|
|
switch self {
|
|
case .any(let name): name
|
|
case .specific(let name, _): name
|
|
}
|
|
}
|
|
}
|