File: DirectiveArgumentValueConvertible.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (80 lines) | stat: -rw-r--r-- 2,290 bytes parent folder | download
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
    }
}