Update load factory methods interface
This commit is contained in:
parent
7b743d286e
commit
a14d6db853
|
@ -1,28 +1,46 @@
|
|||
import Foundation
|
||||
|
||||
public extension Config {
|
||||
func load(env filename: String) throws {
|
||||
try load(from: DefaultConfigurationProvider(loader: Fetcher.file(filename), parser: Parser.donEnv))
|
||||
extension Config {
|
||||
|
||||
/// 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 {
|
||||
try load(from: DefaultConfigurationProvider(loader: Fetcher.direct(data), parser: Parser.donEnv))
|
||||
/// External data source
|
||||
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 {
|
||||
try load(from: DefaultConfigurationProvider(loader: Fetcher.file(filename), parser: Parser.json))
|
||||
}
|
||||
/// External data format
|
||||
public enum Format {
|
||||
case dotEnv
|
||||
case json
|
||||
case plist
|
||||
|
||||
func load(json data: Data) throws {
|
||||
try load(from: DefaultConfigurationProvider(loader: Fetcher.direct(data), parser: Parser.json))
|
||||
var parser: DefaultConfigurationProvider.Parser {
|
||||
switch self {
|
||||
case .dotEnv: return Parser.donEnv
|
||||
case .json: return Parser.json
|
||||
case .plist: return Parser.plist
|
||||
}
|
||||
|
||||
func load(plist filename: String) throws {
|
||||
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))
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,10 +9,22 @@ extension Fetcher {
|
|||
return { data }
|
||||
}
|
||||
|
||||
static let url: (URL) -> DefaultConfigurationProvider.Fetcher = { url in
|
||||
return { try Data(contentsOf: url) }
|
||||
}
|
||||
|
||||
static let file: (String) -> DefaultConfigurationProvider.Fetcher = { configName in
|
||||
return url(URL(fileURLWithPath: configName, isDirectory: false))
|
||||
}
|
||||
|
||||
static let string: (String) -> DefaultConfigurationProvider.Fetcher = { string in
|
||||
return {
|
||||
let url = URL(fileURLWithPath: configName, isDirectory: false)
|
||||
return try Data(contentsOf: url)
|
||||
guard let data = string.data(using: .utf8) else {
|
||||
struct InvalidString: Error {}
|
||||
throw InvalidString()
|
||||
}
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue