// // Event.swift // RxSwift // // Created by Krunoslav Zaher on 2/8/15. // Copyright © 2015 Krunoslav Zaher. All rights reserved. // /// Represents a sequence event. /// /// Sequence grammar: /// **next\* (error | completed)** public enum Event { /// Next element is produced. case next(Element) /// Sequence terminated with an error. case error(Swift.Error) /// Sequence completed successfully. case completed } extension Event : CustomDebugStringConvertible { /// - returns: Description of event. public var debugDescription: String { switch self { case .next(let value): return "next(\(value))" case .error(let error): return "error(\(error))" case .completed: return "completed" } } } extension Event { /// Is `Completed` or `Error` event. public var isStopEvent: Bool { switch self { case .next: return false case .error, .completed: return true } } /// If `Next` event, returns element value. public var element: Element? { if case .next(let value) = self { return value } return nil } /// If `Error` event, returns error. public var error: Swift.Error? { if case .error(let error) = self { return error } return nil } } extension Event { /// Maps sequence elements using transform. If error happens during the transform .error /// will be returned as value public func map(_ transform: (Element) throws -> Result) -> Event { do { switch self { case let .next(element): return .next(try transform(element)) case let .error(error): return .error(error) case .completed: return .completed } } catch let e { return .error(e) } } }