mirror of
https://github.com/GayPizzaSpecifications/darwin-apk.git
synced 2025-08-03 21:41:31 +00:00
make ApkIndexDependency conform to ApkIndexRequirementRef
dunno if this is necessary for the graph to work but we'll see
This commit is contained in:
@ -3,22 +3,12 @@
|
|||||||
* SPDX-License-Identifier: Apache-2.0
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum ApkVersionSpecification: Equatable {
|
enum ApkVersionSpecification: Equatable, Hashable {
|
||||||
case any
|
case any
|
||||||
case constraint(op: Operator, version: String)
|
case constraint(op: Operator, version: String)
|
||||||
case conflict
|
case conflict
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ApkVersionSpecification: CustomStringConvertible {
|
|
||||||
var description: String {
|
|
||||||
switch self {
|
|
||||||
case .any: ""
|
|
||||||
case .conflict: "!"
|
|
||||||
case .constraint(let op, let version): "\(op)\(version)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension ApkVersionSpecification {
|
extension ApkVersionSpecification {
|
||||||
enum Operator: Equatable {
|
enum Operator: Equatable {
|
||||||
case equals
|
case equals
|
||||||
|
@ -9,8 +9,9 @@ struct ApkIndexDependency: ApkIndexRequirementRef {
|
|||||||
let name: String
|
let name: String
|
||||||
let versionSpec: ApkVersionSpecification
|
let versionSpec: ApkVersionSpecification
|
||||||
|
|
||||||
init(extract: String) throws(ApkRequirement.ParseError) {
|
init(name: String, version spec: ApkVersionSpecification) {
|
||||||
(self.name, self.versionSpec) = try ApkRequirement.extract(blob: extract)
|
self.name = name
|
||||||
|
self.versionSpec = spec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ struct ApkIndexInstallIf: ApkIndexRequirementRef {
|
|||||||
let name: String
|
let name: String
|
||||||
let versionSpec: ApkVersionSpecification
|
let versionSpec: ApkVersionSpecification
|
||||||
|
|
||||||
init(extract: String) throws(ApkRequirement.ParseError) {
|
init(name: String, version spec: ApkVersionSpecification) {
|
||||||
(self.name, self.versionSpec) = try ApkRequirement.extract(blob: extract)
|
self.name = name
|
||||||
|
self.versionSpec = spec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct ApkIndexPackage: Hashable {
|
struct ApkIndexPackage: ApkIndexRequirementRef {
|
||||||
let indexChecksum: ApkIndexDigest
|
let indexChecksum: ApkIndexDigest
|
||||||
let name: String
|
let name: String
|
||||||
let version: String
|
let version: String
|
||||||
@ -28,6 +28,10 @@ struct ApkIndexPackage: Hashable {
|
|||||||
|
|
||||||
//TODO: Implementation
|
//TODO: Implementation
|
||||||
//lazy var semanticVersion: (Int, Int, Int) = (0, 0, 0)
|
//lazy var semanticVersion: (Int, Int, Int) = (0, 0, 0)
|
||||||
|
|
||||||
|
init(name: String, version spec: ApkVersionSpecification) {
|
||||||
|
fatalError("Cannot construct an ApkIndexPackage this way")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension ApkIndexPackage {
|
extension ApkIndexPackage {
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
struct ApkIndexProvides: ApkIndexRequirementRef {
|
struct ApkIndexProvides: ApkIndexRequirementRef {
|
||||||
let name: String
|
let name: String
|
||||||
|
|
||||||
init(extract: String) throws(ApkRequirement.ParseError) {
|
init(name: String, version _: ApkVersionSpecification) {
|
||||||
(self.name, _) = try ApkRequirement.extract(blob: extract)
|
self.name = name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ protocol ApkIndexRequirementRef: Equatable, Hashable {
|
|||||||
var name: String { get }
|
var name: String { get }
|
||||||
var invert: Bool { get }
|
var invert: Bool { get }
|
||||||
|
|
||||||
init(extract: String) throws(ApkRequirement.ParseError)
|
init(name: String, version spec: ApkVersionSpecification)
|
||||||
|
|
||||||
func satisfied(by other: ApkIndexPackage) -> Bool
|
func satisfied(by other: ApkIndexPackage) -> Bool
|
||||||
}
|
}
|
||||||
@ -16,18 +16,11 @@ extension ApkIndexRequirementRef {
|
|||||||
var invert: Bool { false }
|
var invert: Bool { false }
|
||||||
func satisfied(by _: ApkIndexPackage) -> Bool { true }
|
func satisfied(by _: ApkIndexPackage) -> Bool { true }
|
||||||
|
|
||||||
static func == (lhs: Self, rhs: Self) -> Bool {
|
|
||||||
return !(lhs.name != rhs.name && !lhs.invert)
|
|
||||||
}
|
|
||||||
|
|
||||||
func hash(into hasher: inout Hasher) {
|
|
||||||
self.name.hash(into: &hasher)
|
|
||||||
}
|
|
||||||
|
|
||||||
static func extract<T: ApkIndexRequirementRef>(_ blob: String) throws(ApkRequirement.ParseError) -> [T] {
|
static func extract<T: ApkIndexRequirementRef>(_ blob: String) throws(ApkRequirement.ParseError) -> [T] {
|
||||||
return try blob.components(separatedBy: " ")
|
return try blob.components(separatedBy: " ")
|
||||||
.map { token throws(ApkRequirement.ParseError) in
|
.map { token throws(ApkRequirement.ParseError) in
|
||||||
try .init(extract: token)
|
let (name, versionSpec) = try ApkRequirement.extract(blob: token)
|
||||||
|
return .init(name: name, version: versionSpec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user