@@ -15,23 +15,24 @@ public struct SwiftLanguage: Language {
1515
1616 public var boolName : String { " Bool " }
1717
18- public var builtinAdapters : Set < String > {
18+ public var builtinAdapterTypes : Set < String > {
1919 [
20- " BoolDatabaseValueAdapter " ,
21- " Int8DatabaseValueAdapter " ,
22- " Int16DatabaseValueAdapter " ,
23- " Int32DatabaseValueAdapter " ,
24- " Int64DatabaseValueAdapter " ,
25- " UInt8DatabaseValueAdapter " ,
26- " UInt16DatabaseValueAdapter " ,
27- " UInt32DatabaseValueAdapter " ,
28- " UInt64DatabaseValueAdapter " ,
29- " UIntDatabaseValueAdapter " ,
30- " FloatDatabaseValueAdapter " ,
31- " Float16DatabaseValueAdapter " ,
32- " UUIDDatabaseValueAdapter " ,
33- " DecimalDatabaseValueAdapter " ,
34- " DateDatabaseValueAdapter " ,
20+ " Bool " ,
21+ " Int8 " ,
22+ " Int16 " ,
23+ " Int32 " ,
24+ " Int64 " ,
25+ " UInt8 " ,
26+ " UInt16 " ,
27+ " UInt32 " ,
28+ " UInt64 " ,
29+ " UInt " ,
30+ " Float " ,
31+ " Float16 " ,
32+ " UUID " ,
33+ " Decimal " ,
34+ " Date " ,
35+ " URL " ,
3536 ]
3637 }
3738
@@ -87,12 +88,13 @@ public struct SwiftLanguage: Language {
8788
8889 writer. write ( " import Foundation " )
8990 writer. write ( line: " import Otter " )
90- writer. blankLine ( )
9191
9292 for `import` in options. imports {
9393 writer. write ( line: " import \( `import`) " )
9494 }
9595
96+ writer. blankLine ( )
97+
9698 for table in tables {
9799 declaration ( for: table, isOutput: true )
98100 }
@@ -109,7 +111,7 @@ public struct SwiftLanguage: Language {
109111 }
110112 }
111113
112- dbStruct ( queries: queries, migrations: migrations)
114+ dbStruct ( queries: queries, migrations: migrations, adapters : adapters )
113115 writer. blankLine ( )
114116
115117 for query in allQueries {
@@ -166,12 +168,28 @@ public struct SwiftLanguage: Language {
166168
167169 private func dbStruct(
168170 queries: [ ( String ? , [ GeneratedQuery ] ) ] ,
169- migrations: [ String ]
171+ migrations: [ String ] ,
172+ adapters: [ String ]
170173 ) {
171174 writer. write ( line: " struct " , options. databaseName, " : Database " )
172175
173176 writer. braces {
174177 writer. write ( line: " let connection: any Otter.Connection " )
178+
179+ writer. write ( line: " let adapters: Adapters " )
180+ // Don't require initialization if there are no custom adapters
181+ if adapters. isEmpty {
182+ writer. write ( " = Adapters() " )
183+ }
184+ writer. newline ( )
185+
186+ writer. write ( line: " struct Adapters " )
187+ writer. braces {
188+ for adapter in adapters {
189+ writer. write ( line: " let " , adapter, " : DatabaseValueAdapter " )
190+ }
191+ }
192+
175193 writer. newline ( )
176194
177195 writer. write ( line: " static var migrations: [String] " )
@@ -289,6 +307,7 @@ public struct SwiftLanguage: Language {
289307 writer. indent ( )
290308
291309 writer. write ( line: " let connection: any Connection " )
310+ writer. write ( line: " let adapters: " , options. databaseName, " Adapters " )
292311 writer. blankLine ( )
293312
294313 for (position, query) in queries. positional ( ) {
@@ -514,10 +533,10 @@ public struct SwiftLanguage: Language {
514533 writer. write ( " row.optionallyEmbedded(at: start + " , index. description, " ) " )
515534 index += model. fields. count
516535 case let . encoded( storage, _, adapter) :
517- writer. write ( " row.value(at: start + " , index. description, " , using: " , adapter, " .self , storage: " , typeName ( for: storage) , " .self) " )
536+ writer. write ( " row.value(at: start + " , index. description, " , using: adapters. " , adapter, " , storage: " , typeName ( for: storage) , " .self) " )
518537 index += 1
519538 case let . optional( . encoded( storage, _, adapter) ) :
520- writer. write ( " row.optionalValue(at: start + " , index. description, " , using: " , adapter, " .self , storage: " , typeName ( for: storage) , " .self) " )
539+ writer. write ( " row.optionalValue(at: start + " , index. description, " , using: adapters. " , adapter, " , storage: " , typeName ( for: storage) , " .self) " )
521540 index += 1
522541 default :
523542 fatalError ( " Invalid field type \( field. typeName) \( field. type) " )
@@ -680,7 +699,7 @@ public struct SwiftLanguage: Language {
680699 writer. write ( name, " , to: " , index. description)
681700
682701 if let adapter {
683- writer. write ( " , using: " , adapter. name, " .self , as: " , adapter. storage, " .self " )
702+ writer. write ( " , using: adapters. " , adapter. name, " , as: " , adapter. storage, " .self " )
684703 }
685704
686705 writer. write ( " ) " )
0 commit comments