@@ -37,6 +37,36 @@ public final class CachedCompilation {
3737 lib. api. swiftscan_cached_compilation_is_uncacheable ( ptr)
3838 }
3939
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+
4070 deinit {
4171 lib. api. swiftscan_cached_compilation_dispose ( ptr)
4272 }
@@ -235,35 +265,15 @@ extension swiftscan_cache_replay_result_t {
235265#if canImport(_Concurrency)
236266// Async API Vendor
237267extension 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)
257273 } else {
258- obj . continuation. resume ( throwing : DependencyScanningError . casError ( " unknown makeGlobal error " ) )
274+ continuation. resume ( returning : ( ) )
259275 }
260276 }
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 )
267277 }
268278 }
269279}
@@ -334,5 +344,37 @@ extension SwiftScanCAS {
334344 scanner. api. swiftscan_cache_query_async ( cas, key. cString ( using: . utf8) , globally, context. retain ( ) , callbackFunc, nil )
335345 }
336346 }
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+ }
337379}
338380#endif
0 commit comments