public enum LoadState: Equatable {
    case loading
    case loaded
    case failed(String)
}

public enum LoadValueState<T> {
    case loading
    case loaded(T)
    case failed(String)

    public var value: T? {
        switch self {
        case .loaded(let value): return value
        case .loading, .failed: return nil
        }
    }
}

extension LoadValueState: Equatable where T: Equatable {}
extension LoadValueState: Hashable where T: Hashable {}
