You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
733 B

  1. //
  2. // Promise+Validate.swift
  3. // then
  4. //
  5. // Created by Sacha Durand Saint Omer on 22/02/2017.
  6. // Copyright © 2017 s4cha. All rights reserved.
  7. //
  8. import Foundation
  9. extension Promise {
  10. @discardableResult
  11. public func validate(withError: Error = PromiseError.validationFailed,
  12. _ assertionBlock:@escaping ((T) -> Bool)) -> Promise<T> {
  13. let p = newLinkedPromise()
  14. syncStateWithCallBacks(
  15. success: { t in
  16. if assertionBlock(t) {
  17. p.fulfill(t)
  18. } else {
  19. p.reject(withError)
  20. }
  21. },
  22. failure: p.reject,
  23. progress: p.setProgress)
  24. return p
  25. }
  26. }