// // MessageFetcher.swift // tst // // Created by Vitaly Takmazov on 10.12.2019. // Copyright © 2019 com.juick. All rights reserved. // import Foundation import Combine class MessageFetcher: ObservableObject { typealias Feed = [MessageData] struct MessageData : Identifiable { var id : String { get { return "\(message.mid.stringValue)-\(message.rid?.intValue ?? 0)" } } var message : Message } @Published var state: LoadableState = .loading init(url: String) { guard let apiUrl = URL(string: url) else { state = .fetched(.failure(.error("Malformed API URL."))) return } AppDelegate.shared.api.pullNext(fromPath: url, params: nil) { (messages, error) in if let error = error { self.state = .fetched(.failure(.error(error.localizedDescription))) return } guard let messages = messages else { self.state = .fetched(.failure(.error("Malformed response data"))) return } self.state = .fetched(.success(messages.map { return MessageData(message: $0) } )) } } }