@@ -471,6 +471,51 @@ private class SQLiteDecoder: Decoder {
471
471
}
472
472
}
473
473
474
+ func decodeIfPresent( _ type: Bool . Type , forKey key: Key ) throws -> Bool ? {
475
+ try ? row. get ( Expression ( key. stringValue) )
476
+ }
477
+
478
+ func decodeIfPresent( _ type: Int . Type , forKey key: Key ) throws -> Int ? {
479
+ try ? row. get ( Expression ( key. stringValue) )
480
+ }
481
+
482
+ func decodeIfPresent( _ type: Int64 . Type , forKey key: Key ) throws -> Int64 ? {
483
+ try ? row. get ( Expression ( key. stringValue) )
484
+ }
485
+
486
+ func decodeIfPresent( _ type: Float . Type , forKey key: Key ) throws -> Float ? {
487
+ try ? Float ( row. get ( Expression < Double > ( key. stringValue) ) )
488
+ }
489
+
490
+ func decodeIfPresent( _ type: Double . Type , forKey key: Key ) throws -> Double ? {
491
+ try ? row. get ( Expression ( key. stringValue) )
492
+ }
493
+
494
+ func decodeIfPresent( _ type: String . Type , forKey key: Key ) throws -> String ? {
495
+ try ? row. get ( Expression ( key. stringValue) )
496
+ }
497
+
498
+ func decodeIfPresent< T> ( _ type: T . Type , forKey key: Key ) throws -> T ? where T: Swift . Decodable {
499
+ switch type {
500
+ case is Data . Type :
501
+ return try ? row. get ( Expression < Data > ( key. stringValue) ) as? T
502
+ case is Date . Type :
503
+ return try ? row. get ( Expression < Date > ( key. stringValue) ) as? T
504
+ case is UUID . Type :
505
+ return try ? row. get ( Expression < UUID > ( key. stringValue) ) as? T
506
+ default :
507
+ guard let JSONString = try ? row. get ( Expression < String ? > ( key. stringValue) ) else {
508
+ throw DecodingError . typeMismatch ( type, DecodingError . Context ( codingPath: codingPath,
509
+ debugDescription: " an unsupported type was found " ) )
510
+ }
511
+ guard let data = JSONString . data ( using: . utf8) else {
512
+ throw DecodingError . dataCorrupted ( DecodingError . Context ( codingPath: codingPath,
513
+ debugDescription: " invalid utf8 data found " ) )
514
+ }
515
+ return try JSONDecoder ( ) . decode ( type, from: data)
516
+ }
517
+ }
518
+
474
519
func nestedContainer< NestedKey> ( keyedBy type: NestedKey . Type , forKey key: Key ) throws
475
520
-> KeyedDecodingContainer < NestedKey > where NestedKey: CodingKey {
476
521
throw DecodingError . dataCorrupted ( DecodingError . Context ( codingPath: codingPath,
0 commit comments