Skip to content

Commit ac6ebfe

Browse files
committed
Add comparison operators for CodingKey
1 parent 13e8a5c commit ac6ebfe

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

Sources/CoreModel/Predicate/Comparison.swift

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,79 @@ public extension String {
266266
return .comparison(comparison)
267267
}
268268
}
269+
270+
public func < <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
271+
272+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
273+
right: .attribute(rhs.attributeValue),
274+
type: .lessThan)
275+
276+
return .comparison(comparison)
277+
}
278+
279+
public func <= <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
280+
281+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
282+
right: .attribute(rhs.attributeValue),
283+
type: .lessThanOrEqualTo)
284+
285+
return .comparison(comparison)
286+
}
287+
288+
public func > <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
289+
290+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
291+
right: .attribute(rhs.attributeValue),
292+
type: .greaterThan)
293+
294+
return .comparison(comparison)
295+
}
296+
297+
public func >= <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
298+
299+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
300+
right: .attribute(rhs.attributeValue),
301+
type: .greaterThanOrEqualTo)
302+
303+
return .comparison(comparison)
304+
}
305+
306+
public func == <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
307+
308+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
309+
right: .attribute(rhs.attributeValue),
310+
type: .equalTo)
311+
312+
return .comparison(comparison)
313+
}
314+
315+
public func != <K: CodingKey, T: AttributeEncodable>(lhs: K, rhs: T) -> FetchRequest.Predicate {
316+
317+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: lhs.stringValue)),
318+
right: .attribute(rhs.attributeValue),
319+
type: .notEqualTo)
320+
321+
return .comparison(comparison)
322+
}
323+
324+
// Extensions for KeyPath comparisons
325+
public extension CodingKey {
326+
327+
func compare(_ type: FetchRequest.Predicate.Comparison.Operator, _ rhs: FetchRequest.Predicate.Expression) -> FetchRequest.Predicate {
328+
329+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: stringValue)), right: rhs, type: type)
330+
return .comparison(comparison)
331+
}
332+
333+
func compare(_ type: FetchRequest.Predicate.Comparison.Operator, _ options: Set<FetchRequest.Predicate.Comparison.Option>, _ rhs: FetchRequest.Predicate.Expression) -> FetchRequest.Predicate {
334+
335+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: stringValue)), right: rhs, type: type, options: options)
336+
return .comparison(comparison)
337+
}
338+
339+
func compare(_ modifier: FetchRequest.Predicate.Comparison.Modifier, _ type: FetchRequest.Predicate.Comparison.Operator, _ options: Set<FetchRequest.Predicate.Comparison.Option>, _ rhs: FetchRequest.Predicate.Expression) -> FetchRequest.Predicate {
340+
341+
let comparison = FetchRequest.Predicate.Comparison(left: .keyPath(.init(rawValue: stringValue)), right: rhs, type: type, modifier: modifier, options: options)
342+
return .comparison(comparison)
343+
}
344+
}

0 commit comments

Comments
 (0)