Update load factory methods interface

This commit is contained in:
Alexandr Goncharov 2020-06-10 15:02:10 +03:00 committed by Gitea
parent 29e1d34db9
commit d561208be8
2 changed files with 50 additions and 20 deletions

View File

@ -1,28 +1,46 @@
import Foundation import Foundation
public extension Config { extension Config {
func load(env filename: String) throws {
try load(from: DefaultConfigurationProvider(loader: Fetcher.file(filename), parser: Parser.donEnv)) /// Loads values from the given source
/// - Parameters:
/// - source: method of data acquiring
/// - format: data format
/// - Throws: `ConfigurationError`
public func load(_ source: Source, format: Format = .dotEnv) throws {
try load(from: DefaultConfigurationProvider(loader: source.fetcher, parser: format.parser))
} }
func load(env data: Data) throws { /// External data source
try load(from: DefaultConfigurationProvider(loader: Fetcher.direct(data), parser: Parser.donEnv)) public enum Source {
case data(Data)
case url(URL)
case file(name: String)
case string(String)
var fetcher: DefaultConfigurationProvider.Fetcher {
switch self {
case let .data(value): return Fetcher.direct(value)
case let .url(value): return Fetcher.url(value)
case let .file(value): return Fetcher.file(value)
case let .string(value): return Fetcher.string(value)
}
}
} }
func load(json filename: String) throws { /// External data format
try load(from: DefaultConfigurationProvider(loader: Fetcher.file(filename), parser: Parser.json)) public enum Format {
} case dotEnv
case json
case plist
func load(json data: Data) throws { var parser: DefaultConfigurationProvider.Parser {
try load(from: DefaultConfigurationProvider(loader: Fetcher.direct(data), parser: Parser.json)) switch self {
} case .dotEnv: return Parser.donEnv
case .json: return Parser.json
func load(plist filename: String) throws { case .plist: return Parser.plist
try load(from: DefaultConfigurationProvider(loader: Fetcher.file(filename), parser: Parser.plist)) }
} }
func load(plist data: Data) throws {
try load(from: DefaultConfigurationProvider(loader: Fetcher.direct(data), parser: Parser.plist))
} }
} }

View File

@ -9,10 +9,22 @@ extension Fetcher {
return { data } return { data }
} }
static let url: (URL) -> DefaultConfigurationProvider.Fetcher = { url in
return { try Data(contentsOf: url) }
}
static let file: (String) -> DefaultConfigurationProvider.Fetcher = { configName in static let file: (String) -> DefaultConfigurationProvider.Fetcher = { configName in
return url(URL(fileURLWithPath: configName, isDirectory: false))
}
static let string: (String) -> DefaultConfigurationProvider.Fetcher = { string in
return { return {
let url = URL(fileURLWithPath: configName, isDirectory: false) guard let data = string.data(using: .utf8) else {
return try Data(contentsOf: url) struct InvalidString: Error {}
throw InvalidString()
}
return data
} }
} }
} }