@@ -37,6 +37,36 @@ public final class CachedCompilation {
37
37
lib. api. swiftscan_cached_compilation_is_uncacheable ( ptr)
38
38
}
39
39
40
+ public func makeGlobal( _ callback: @escaping ( Swift . Error ? ) -> ( ) ) {
41
+ class CallbackContext {
42
+ func retain( ) -> UnsafeMutableRawPointer {
43
+ return Unmanaged . passRetained ( self ) . toOpaque ( )
44
+ }
45
+
46
+ let comp : CachedCompilation
47
+ let callback : ( Swift . Error ? ) -> ( )
48
+ init ( _ compilation: CachedCompilation , _ callback: @escaping ( Swift . Error ? ) -> ( ) ) {
49
+ self . comp = compilation
50
+ self . callback = callback
51
+ }
52
+ }
53
+
54
+ func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ error: swiftscan_string_ref_t ) {
55
+ let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
56
+ if error. length != 0 {
57
+ if let err = try ? obj. comp. lib. toSwiftString ( error) {
58
+ obj. callback ( DependencyScanningError . casError ( err) )
59
+ } else {
60
+ obj. callback ( DependencyScanningError . casError ( " unknown makeGlobal error " ) )
61
+ }
62
+ }
63
+ obj. callback ( nil )
64
+ }
65
+
66
+ let context = CallbackContext ( self , callback)
67
+ lib. api. swiftscan_cached_compilation_make_global_async ( ptr, context. retain ( ) , callbackFunc, nil )
68
+ }
69
+
40
70
deinit {
41
71
lib. api. swiftscan_cached_compilation_dispose ( ptr)
42
72
}
@@ -235,35 +265,15 @@ extension swiftscan_cache_replay_result_t {
235
265
#if canImport(_Concurrency)
236
266
// Async API Vendor
237
267
extension CachedCompilation {
238
- public func makeGlobal( ) async throws -> Bool {
239
- class CallbackContext {
240
- func retain( ) -> UnsafeMutableRawPointer {
241
- return Unmanaged . passRetained ( self ) . toOpaque ( )
242
- }
243
-
244
- let continuation : CheckedContinuation < Bool , Swift . Error >
245
- let comp : CachedCompilation
246
- init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , compilation: CachedCompilation ) {
247
- self . continuation = continuation
248
- self . comp = compilation
249
- }
250
- }
251
-
252
- func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ error: swiftscan_string_ref_t ) {
253
- let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
254
- if error. length != 0 {
255
- if let err = try ? obj. comp. lib. toSwiftString ( error) {
256
- obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
268
+ public func makeGlobal( ) async throws {
269
+ return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Void , Swift . Error > ) in
270
+ makeGlobal { ( error: Swift . Error ? ) in
271
+ if let err = error {
272
+ continuation. resume ( throwing: err)
257
273
} else {
258
- obj . continuation. resume ( throwing : DependencyScanningError . casError ( " unknown makeGlobal error " ) )
274
+ continuation. resume ( returning : ( ) )
259
275
}
260
276
}
261
- obj. continuation. resume ( returning: true )
262
- }
263
-
264
- return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
265
- let context = CallbackContext ( continuation, compilation: self )
266
- lib. api. swiftscan_cached_compilation_make_global_async ( ptr, context. retain ( ) , callbackFunc, nil )
267
277
}
268
278
}
269
279
}
@@ -334,5 +344,37 @@ extension SwiftScanCAS {
334
344
scanner. api. swiftscan_cache_query_async ( cas, key. cString ( using: . utf8) , globally, context. retain ( ) , callbackFunc, nil )
335
345
}
336
346
}
347
+
348
+ public func download( with id: String ) async throws -> Bool {
349
+ class CallbackContext {
350
+ func retain( ) -> UnsafeMutableRawPointer {
351
+ return Unmanaged . passRetained ( self ) . toOpaque ( )
352
+ }
353
+
354
+ let continuation : CheckedContinuation < Bool , Swift . Error >
355
+ let cas : SwiftScanCAS
356
+ init ( _ continuation: CheckedContinuation < Bool , Swift . Error > , cas: SwiftScanCAS ) {
357
+ self . continuation = continuation
358
+ self . cas = cas
359
+ }
360
+ }
361
+
362
+ func callbackFunc( _ context: UnsafeMutableRawPointer ? , _ success: Bool , _ error: swiftscan_string_ref_t ) {
363
+ let obj = Unmanaged < CallbackContext > . fromOpaque ( context!) . takeRetainedValue ( )
364
+ if error. length != 0 {
365
+ if let err = try ? obj. cas. scanner. toSwiftString ( error) {
366
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( err) )
367
+ } else {
368
+ obj. continuation. resume ( throwing: DependencyScanningError . casError ( " unknown output loading error " ) )
369
+ }
370
+ }
371
+ obj. continuation. resume ( returning: success)
372
+ }
373
+
374
+ return try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < Bool , Swift . Error > ) in
375
+ let context = CallbackContext ( continuation, cas: self )
376
+ scanner. api. swiftscan_cache_download_cas_object_async ( cas, id. cString ( using: . utf8) , context. retain ( ) , callbackFunc, nil )
377
+ }
378
+ }
337
379
}
338
380
#endif
0 commit comments