* Move everything into package * Remove .DS_Store * Move scripts and eslintrc to package * Create CODE_OF_CONDUCT.md * fix some links * Update all links (I think) * Update generated docs * Update notice-yarn-changes.yml * Update validate-android.yml * Update validate-cpp.yml * Delete notice-yarn-changes.yml * Update validate-cpp.yml * Update validate-cpp.yml * Update validate-js.yml * Update validate-cpp.yml * Update validate-cpp.yml * wrong c++ style * Revert "wrong c++ style" This reverts commit 55a3575589c6f13f8b05134d83384f55e0601ab2.
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| //
 | |
| //  Promise.swift
 | |
| //  mrousavy
 | |
| //
 | |
| //  Created by Marc Rousavy on 14.01.21.
 | |
| //  Copyright © 2021 mrousavy. All rights reserved.
 | |
| //
 | |
| 
 | |
| import Foundation
 | |
| 
 | |
| // MARK: - Promise
 | |
| 
 | |
| /**
 | |
|  * Represents a JavaScript Promise instance. `reject()` and `resolve()` should only be called once.
 | |
|  */
 | |
| class Promise {
 | |
|   init(resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
 | |
|     self.resolver = resolver
 | |
|     self.rejecter = rejecter
 | |
|   }
 | |
| 
 | |
|   func reject(error: CameraError, cause: NSError?) {
 | |
|     rejecter(error.code, error.message, cause)
 | |
|   }
 | |
| 
 | |
|   func reject(error: CameraError) {
 | |
|     reject(error: error, cause: nil)
 | |
|   }
 | |
| 
 | |
|   func resolve(_ value: Any?) {
 | |
|     resolver(value)
 | |
|   }
 | |
| 
 | |
|   func resolve() {
 | |
|     resolve(nil)
 | |
|   }
 | |
| 
 | |
|   // MARK: Private
 | |
| 
 | |
|   private let resolver: RCTPromiseResolveBlock
 | |
|   private let rejecter: RCTPromiseRejectBlock
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Wrap a block with an automatic promise resolver and rejecter.
 | |
|  *
 | |
|  * The value returned by the `block` must be serializable by the React Native bridge, or `nil`.
 | |
|  * The error thrown by the `block` should be a `CameraError`
 | |
|  */
 | |
| func withPromise(_ promise: Promise, _ block: () throws -> Any?) {
 | |
|   do {
 | |
|     let result = try block()
 | |
|     promise.resolve(result)
 | |
|   } catch let error as CameraError {
 | |
|     promise.reject(error: error)
 | |
|   } catch let error as NSError {
 | |
|     promise.reject(error: CameraError.unknown(message: error.description), cause: error)
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Wrap a block with an automatic promise resolver and rejecter.
 | |
|  *
 | |
|  * The value returned by the `block` must be serializable by the React Native bridge, or `nil`.
 | |
|  * The error thrown by the `block` should be a `CameraError`
 | |
|  */
 | |
| func withPromise(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock, _ block: () throws -> Any?) {
 | |
|   return withPromise(Promise(resolver: resolve, rejecter: reject), block)
 | |
| }
 |