1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 2022 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See https://swift.org/LICENSE.txt for license information
See https://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
import Foundation
protocol DirectiveArgumentValueConvertible {
/// Instantiates an instance of the conforming directive argument value type from a string representation.
/// - Parameter rawDirectiveArgumentValue: A string representation of the directive argument value.
init?(rawDirectiveArgumentValue: String)
static func allowedValues() -> [String]?
static func expectedFormat() -> String?
}
extension DirectiveArgumentValueConvertible {
static func expectedFormat() -> String? {
return nil
}
}
extension RawRepresentable where Self: DirectiveArgumentValueConvertible, RawValue == String {
init?(rawDirectiveArgumentValue: String) {
self.init(rawValue: rawDirectiveArgumentValue)
}
}
extension RawRepresentable where Self: DirectiveArgumentValueConvertible, Self: CaseIterable, Self.RawValue == String {
static func allowedValues() -> [String]? {
return Self.allCases.map { allowedArgument in
allowedArgument.rawValue
}
}
}
extension String: DirectiveArgumentValueConvertible {
init?(rawDirectiveArgumentValue: String) {
self.init(rawDirectiveArgumentValue)
}
static func allowedValues() -> [String]? {
return nil
}
}
extension URL: DirectiveArgumentValueConvertible {
init?(rawDirectiveArgumentValue: String) {
self.init(string: rawDirectiveArgumentValue)
}
static func allowedValues() -> [String]? {
return nil
}
}
extension Bool: DirectiveArgumentValueConvertible {
init?(rawDirectiveArgumentValue: String) {
self.init(rawDirectiveArgumentValue)
}
static func allowedValues() -> [String]? {
return ["true", "false"]
}
}
extension Int: DirectiveArgumentValueConvertible {
init?(rawDirectiveArgumentValue: String) {
self.init(rawDirectiveArgumentValue)
}
static func allowedValues() -> [String]? {
return nil
}
}
|