mirror of
https://github.com/tappollo/WWDC.git
synced 2026-06-11 15:43:45 +08:00
67 lines
1.9 KiB
Swift
67 lines
1.9 KiB
Swift
//
|
|
// SessionsResponseAdapter.swift
|
|
// WWDC
|
|
//
|
|
// Created by Guilherme Rambo on 21/02/17.
|
|
// Copyright © 2017 Guilherme Rambo. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftyJSON
|
|
|
|
private enum SessionResponseKeys: String, JSONSubscriptType {
|
|
case events, sessions
|
|
|
|
var jsonKey: JSONKey {
|
|
return JSONKey.key(rawValue)
|
|
}
|
|
}
|
|
|
|
final class SessionsResponseAdapter: Adapter {
|
|
|
|
typealias InputType = JSON
|
|
typealias OutputType = SessionsResponse
|
|
|
|
func adapt(_ input: JSON) -> Result<SessionsResponse, AdapterError> {
|
|
guard let eventsJson = input[SessionResponseKeys.events].array else {
|
|
return .error(.missingKey(SessionResponseKeys.events))
|
|
}
|
|
|
|
guard let sessionsJson = input[SessionResponseKeys.sessions].array else {
|
|
return .error(.missingKey(SessionResponseKeys.sessions))
|
|
}
|
|
|
|
guard case .success(let events) = EventsJSONAdapter().adapt(eventsJson) else {
|
|
return .error(.invalidData)
|
|
}
|
|
|
|
guard case .success(let sessions) = SessionsJSONAdapter().adapt(sessionsJson) else {
|
|
return .error(.invalidData)
|
|
}
|
|
|
|
guard case .success(let assets) = SessionAssetsJSONAdapter().adapt(sessionsJson) else {
|
|
return .error(.invalidData)
|
|
}
|
|
|
|
var trackNames = Set<String>()
|
|
|
|
sessions.forEach { session in
|
|
guard !trackNames.contains(session.trackName) else { return }
|
|
trackNames.insert(session.trackName)
|
|
}
|
|
|
|
let tracks: [Track] = trackNames.map { name in
|
|
let track = Track()
|
|
|
|
track.name = name
|
|
|
|
return track
|
|
}
|
|
|
|
let response = SessionsResponse(events: events, sessions: sessions, assets: assets.flatMap({$0}), tracks: tracks)
|
|
|
|
return .success(response)
|
|
}
|
|
|
|
}
|