-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMinusOneToOne.swift
94 lines (67 loc) · 2.07 KB
/
MinusOneToOne.swift
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
81
82
83
84
85
86
87
88
89
90
91
92
public struct MinusOneToOne<Value: Number> {
public let value: Value
public init?(_ value: Value) {
guard value >= -1 && value <= 1 else {
return nil
}
self.value = value
}
}
extension MinusOneToOne {
public static var max: MinusOneToOne {
MinusOneToOne(1)!
}
public static var min: MinusOneToOne {
MinusOneToOne(-1)!
}
}
// MARK: - Multiplication
extension MinusOneToOne {
public static func *(lhs: MinusOneToOne, rhs: MinusOneToOne) -> MinusOneToOne {
MinusOneToOne(lhs.value * rhs.value)!
}
public static func *=(lhs: inout MinusOneToOne, rhs: MinusOneToOne) {
lhs = MinusOneToOne(lhs.value * rhs.value)!
}
}
// MARK: - Equatable
extension MinusOneToOne: Equatable where Value: Equatable {
public static func ==(lhs: MinusOneToOne, rhs: Value) -> Bool {
lhs.value == rhs
}
public static func ==(lhs: Value, rhs: MinusOneToOne) -> Bool {
lhs == rhs.value
}
}
// MARK: - Comparable
extension MinusOneToOne: Comparable {
public static func < (lhs: MinusOneToOne, rhs: MinusOneToOne) -> Bool {
lhs.value < rhs.value
}
}
// MARK: - CustomStringConvertible
extension MinusOneToOne: CustomStringConvertible where Value: CustomStringConvertible {
public var description: String {
value.description
}
}
// MARK: - CustomDebugStringConvertible
extension MinusOneToOne: CustomDebugStringConvertible where Value: CustomDebugStringConvertible {
public var debugDescription: String {
value.debugDescription
}
}
// MARK: - CustomReflectable
extension MinusOneToOne: CustomReflectable where Value: CustomReflectable {
public var customMirror: Mirror {
value.customMirror
}
}
// MARK: - Encodable
extension MinusOneToOne: Encodable where Value: Encodable {}
// MARK: - Decodable
extension MinusOneToOne: Decodable where Value: Decodable {}
// MARK: - Sendable
extension MinusOneToOne: Sendable where Value: Sendable {}
// MARK: - Hashable
extension MinusOneToOne: Hashable where Value: Hashable {}