import Bindings

public struct LogLevelConfigurator {
  public var set: (LogLevel) throws -> Void

  public func callAsFunction(logLevel: LogLevel) throws {
    try set(logLevel)
  }
}

extension LogLevelConfigurator {
  public static let live = LogLevelConfigurator { logLevel in
    var error: NSError?
    let result = BindingsLogLevel(logLevel.rawValue, &error)
    if let error = error {
      throw error
    }
    if !result {
      fatalError("BindingsLogLevel returned `false` without providing error")
    }
  }
}

#if DEBUG
extension LogLevelConfigurator {
  public static let failing = LogLevelConfigurator { _ in
    struct NotImplemented: Error {}
    throw NotImplemented()
  }
}
#endif