// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "shill/dns_client_factory.h"

#include <memory>

namespace shill {

DnsClientFactory::DnsClientFactory() = default;
DnsClientFactory::~DnsClientFactory() = default;

DnsClientFactory* DnsClientFactory::GetInstance() {
  static base::NoDestructor<DnsClientFactory> instance;
  return instance.get();
}

std::unique_ptr<DnsClient> DnsClientFactory::CreateDnsClient(
    IPAddress::Family family,
    const std::string& interface_name,
    const std::vector<std::string>& dns_servers,
    int timeout_ms,
    EventDispatcher* dispatcher,
    const DnsClient::ClientCallback& callback) {
  return std::make_unique<DnsClient>(family, interface_name, dns_servers,
                                     timeout_ms, dispatcher, callback);
}

}  // namespace shill
