Update load factory methods interface
This commit is contained in:
parent
7b743d286e
commit
a14d6db853
|
@ -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))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue