case User = "User" case Organization = "Organization" } let id: Int let login: String let type: Type let avatarURL: NSURL static func decode(e: Extractor) -> User? { let create = { User($0) } return build( e <| "id", e <| "login", (e <| "type").flatMap { Type(rawValue: $0) }, e <| "avatar_url").flatMap { NSURL(string: $0) } ).map(create) }