43 lines
1.2 KiB
Swift
43 lines
1.2 KiB
Swift
//
|
|
// Event+Equatable.swift
|
|
// Rx
|
|
//
|
|
// Created by Krunoslav Zaher on 12/19/15.
|
|
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import RxSwift
|
|
|
|
/**
|
|
Compares two events. They are equal if they are both the same member of `Event` enumeration.
|
|
|
|
In case `Error` events are being compared, they are equal in case their `NSError` representations are equal (domain and code)
|
|
and their string representations are equal.
|
|
*/
|
|
public func == <Element: Equatable>(lhs: Event<Element>, rhs: Event<Element>) -> Bool {
|
|
switch (lhs, rhs) {
|
|
case (.Completed, .Completed): return true
|
|
case (.Error(let e1), .Error(let e2)):
|
|
// if the references are equal, then it's the same object
|
|
if let lhsObject = lhs as? AnyObject,
|
|
rhsObject = rhs as? AnyObject
|
|
where lhsObject === rhsObject {
|
|
return true
|
|
}
|
|
|
|
#if os(Linux)
|
|
return "\(e1)" == "\(e2)"
|
|
#else
|
|
let error1 = e1 as NSError
|
|
let error2 = e2 as NSError
|
|
|
|
return error1.domain == error2.domain
|
|
&& error1.code == error2.code
|
|
&& "\(e1)" == "\(e2)"
|
|
#endif
|
|
case (.Next(let v1), .Next(let v2)): return v1 == v2
|
|
default: return false
|
|
}
|
|
}
|