twigs-ios/Twigs/AsyncData.swift

39 lines
1.1 KiB
Swift

//
// AsyncData.swift
// Twigs
//
// Created by William Brawner on 12/31/21.
// Copyright © 2021 William Brawner. All rights reserved.
//
import Foundation
import SwiftUI
enum AsyncData<Data>: Equatable where Data: Equatable {
case empty
case loading
case error(Error, Data? = nil)
case editing(Data)
case saving(Data)
case success(Data)
static func == (lhs: AsyncData, rhs: AsyncData) -> Bool {
switch (lhs, rhs) {
case (.empty, .empty):
return true
case (.loading, .loading):
return true
case (.error(let lError, let lData), .error(let rError, let rData)):
return lError.localizedDescription == rError.localizedDescription
&& ((lData == nil && rData == nil) || lData == rData)
case (.editing(let lData), .editing(let rData)):
return lData == rData
case (.saving(let lData), .saving(let rData)):
return lData == rData
case (.success(let lData), .success(let rData)):
return lData == rData
default:
return false
}
}
}