Skip to content

Commit

Permalink
Make RemoteName parser more relaxed for now
Browse files Browse the repository at this point in the history
  • Loading branch information
edigaryev committed May 3, 2022
1 parent 8f2a51d commit 20fffbb
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions Sources/tart/OCI/RemoteName.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,35 +23,37 @@ struct RemoteName: Comparable {
}

init(_ name: String) throws {
let alphas = UInt8(ascii: "a")...UInt8(ascii: "z")
let digits = UInt8(ascii: "0")...UInt8(ascii: "9")
let alphasDigitsCharacters = [alphas, digits].joined().map {
String(UnicodeScalar($0))
}
.joined()
let alphasDigits = CharacterSet(charactersIn: alphasDigitsCharacters)
let csNormal = [
UInt8(ascii: "a")...UInt8(ascii: "z"),
UInt8(ascii: "0")...UInt8(ascii: "9"),
].asCharacterSet().union(CharacterSet(charactersIn: "_-."))

let csHex = [
UInt8(ascii: "a")...UInt8(ascii: "f"),
UInt8(ascii: "0")...UInt8(ascii: "9"),
].asCharacterSet()

let parser = Parse {
Consumed {
alphasDigits.union(CharacterSet(charactersIn: "."))
csNormal
Optionally {
":"
Digits()
}
}
"/"
alphasDigits.union(CharacterSet(charactersIn: "-/"))
csNormal.union(CharacterSet(charactersIn: "/"))
Optionally {
OneOf {
Parse {
":"
alphasDigits.map {
csNormal.map {
Tail(type: .Tag, value: String($0))
}
}
Parse {
"@sha256:"
alphasDigits.map {
csHex.map {
Tail(type: .Digest, value: "sha256:" + String($0))
}
}
Expand All @@ -62,10 +64,10 @@ struct RemoteName: Comparable {

let result = try parser.parse(name)

self.host = String(result.0)
self.namespace = String(result.1)
host = String(result.0)
namespace = String(result.1)
if let tail = result.2 {
self.reference = tail.value
reference = tail.value
}
}

Expand All @@ -79,3 +81,10 @@ struct RemoteName: Comparable {
}
}
}

extension Array where Self.Element == ClosedRange<UInt8> {
func asCharacterSet() -> CharacterSet {
let characters = self.joined().map { String(UnicodeScalar($0)) }.joined()
return CharacterSet(charactersIn: characters)
}
}

0 comments on commit 20fffbb

Please sign in to comment.