NetNewsWire/Frameworks/RSParser/Feeds/FeedParser.swift

46 lines
979 B
Swift
Raw Normal View History

//
// FeedParser.swift
// RSParser
//
// Created by Brent Simmons on 6/20/17.
// Copyright © 2017 Ranchero Software, LLC. All rights reserved.
//
import Foundation
// FeedParser handles RSS, Atom, JSON Feed, and RSS-in-JSON.
// You dont need to know the type of feed.
2017-06-25 19:23:30 +02:00
public struct FeedParser {
public static func parse(_ parserData: ParserData) throws -> ParsedFeed? {
2017-06-25 19:23:30 +02:00
// This is generally fast enough to call on the main thread 
2017-06-26 01:32:07 +02:00
// but its probably a good idea to use a background queue if
// you might be doing a lot of parsing. (Such as in a feed reader.)
do {
let type = feedType(parserData)
2017-06-25 19:23:30 +02:00
switch type {
2017-06-25 19:23:30 +02:00
case .jsonFeed:
return try JSONFeedParser.parse(parserData)
2017-06-25 19:23:30 +02:00
case .rssInJSON:
return try RSSInJSONParser.parse(parserData)
2017-06-25 19:23:30 +02:00
case .rss:
return RSSParser.parse(parserData)
case .atom:
2017-06-26 01:32:07 +02:00
return AtomParser.parse(parserData)
case .unknown, .notAFeed:
return nil
}
2017-06-25 19:23:30 +02:00
}
catch { throw error }
}
}