CocoaPods trunk is moving to be read-only. Read more on the blog, there are 14 months to go.
| TestsTested | ✗ | 
| LangLanguage | SwiftSwift | 
| License | MIT | 
| ReleasedLast Release | Feb 2018 | 
| SPMSupports SPM | ✗ | 
Maintained by Sam Watts, Raman Fedaseyeu, Kingiol, Juvenal Guzman.
To run the example project, clone the repo, and run pod install from the Example directory first.
Moya-Argo is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "Moya-Argo"There are subspecs available for RxSwift and Reactive cocoa if you are using Moya/RxSwift or Moya/ReactiveCocoa. The pod names are Moya-Argo/RxSwift and Moya-Argo/ReactiveCocoa respectively
The first step is having a class / struct which can be mapped by Argo
struct ArgoUser: Decodable {
    
    let id: Int
    let name: String
    
    let birthdate: String?
    
    static func decode(json: JSON) -> Decoded<ArgoUser> {
        return curry(ArgoUser.init)
            <^> json <| "id"
            <*> json <| "name"
            <*> json <|? "birthdate"
    }
}If you have a request setup with Moya already, you can use the mapObject and mapArray methods on the response:
provider
    .request(.AllUsers) { result in
            
        if case let .Success(response) = result {
        
            do {
                let argoUsers:[ArgoUser] = try response.mapArrayWithRootKey("users")
                print("mapped to users: \(argoUsers)")
            } catch {
                print("Error mapping users: \(error)")
            }
        }
    }If you are using the Moya RxSwift extensions, there is an extension on Observable which will simplify the mapping:
provider
    .request(.AllUsers)
    .mapArray(ArgoUser.self, rootKey: "users")
    .observeOn(MainScheduler.instance)
    .subscribeNext { users in
            
        self.users = users
        self.tableView.reloadData()
            
    }.addDisposableTo(disposeBag)Or for ReactiveCocoa, there are similar extensions on SignalProducer:
provider
    .request(.AllUsers)
    .mapArray(ArgoUser.self, rootKey: "users")
    .observeOn(UIScheduler())
    .start { event in
        switch event {
        case .Next(let users):
            self.users = users
            self.tableView.reloadData()
        case .Failed(let error):
            print("error: \(error)")
        default: break
        }
    }The example project shows some example methods which can be used to improve the readability of your code
Issues / Pull Requests / Feedback welcome
I took a lot of guidance from the Moya-ObjectMapper project. If you are using ObjectMapper for your serialisation you should definitely check them out.
Sam Watts, [email protected]
Moya-Argo is available under the MIT license. See the LICENSE file for more info.