Guest User

Untitled

a guest
Apr 26th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. typealias Completion<Value, Error: Swift.Error> = (Result<Value, Error>) -> Void
  2. typealias TaskHandler<Value, Error: Swift.Error> = (@escaping Completion<Value, Error>) -> Void
  3.  
  4. struct Task<Value, Error: Swift.Error> {
  5. private let handler: TaskHandler<Value, Error>
  6.  
  7. init(_ handler: @escaping TaskHandler<Value, Error>) {
  8. self.handler = handler
  9. }
  10.  
  11. func start(_ completion: @escaping Completion<Value, Error>) {
  12. handler(completion)
  13. }
  14.  
  15. func then<NewValue>(_ transform: @escaping (Value) -> Task<NewValue, Error>) -> Task<NewValue, Error> {
  16. return .init { completion in
  17. self.start { result in
  18. switch result {
  19. case .failure(let error):
  20. completion(.failure(error))
  21. case .success(let value):
  22. transform(value).start(completion)
  23. }
  24. }
  25. }
  26. }
  27. }
  28.  
  29. enum Result<Value, Error: Swift.Error> {
  30. case success(Value)
  31. case failure(Error)
  32. }
Add Comment
Please, Sign In to add comment