import Foundation import TelegramCore import SwiftSignalKit import Postbox enum AddressNameValidationStatus: Equatable { case checking case invalidFormat(AddressNameFormatError) case availability(AddressNameAvailability) static func ==(lhs: AddressNameValidationStatus, rhs: AddressNameValidationStatus) -> Bool { switch lhs { case .checking: if case .checking = rhs { return true } else { return false } case let .invalidFormat(error): if case .invalidFormat(error) = rhs { return true } else { return false } case let .availability(availability): if case .availability(availability) = rhs { return true } else { return false } } } } func validateAddressNameInteractive(account: Account, domain: AddressNameDomain, name: String) -> Signal { if let error = checkAddressNameFormat(name) { return .single(.invalidFormat(error)) } else { return .single(.checking) |> then(addressNameAvailability(account: account, domain: domain, name: name) |> delay(0.3, queue: Queue.concurrentDefaultQueue()) |> map { result -> AddressNameValidationStatus in .availability(result) }) } }