#ifndef NET_DNS_PUBLIC_DNS_CONFIG_OVERRIDES_H_
#define NET_DNS_PUBLIC_DNS_CONFIG_OVERRIDES_H_
#include <optional>
#include <string>
#include <vector>
#include "base/time/time.h"
#include "net/base/ip_endpoint.h"
#include "net/base/net_export.h"
#include "net/dns/public/dns_over_https_config.h"
#include "net/dns/public/secure_dns_mode.h"
namespace net {
struct DnsConfig;
struct NET_EXPORT DnsConfigOverrides {
DnsConfigOverrides();
DnsConfigOverrides(const DnsConfigOverrides& other);
DnsConfigOverrides(DnsConfigOverrides&& other);
~DnsConfigOverrides();
DnsConfigOverrides& operator=(const DnsConfigOverrides& other);
DnsConfigOverrides& operator=(DnsConfigOverrides&& other);
friend bool operator==(const DnsConfigOverrides&,
const DnsConfigOverrides&) = default;
static DnsConfigOverrides CreateOverridingEverythingWithDefaults();
DnsConfig ApplyOverrides(const DnsConfig& config) const;
bool OverridesEverything() const;
std::optional<std::vector<IPEndPoint>> nameservers;
std::optional<bool> dns_over_tls_active;
std::optional<std::string> dns_over_tls_hostname;
std::optional<std::vector<std::string>> search;
std::optional<bool> append_to_multi_label_name;
std::optional<int> ndots;
std::optional<base::TimeDelta> fallback_period;
std::optional<int> attempts;
std::optional<int> doh_attempts;
std::optional<bool> rotate;
std::optional<bool> use_local_ipv6;
std::optional<DnsOverHttpsConfig> dns_over_https_config;
std::optional<SecureDnsMode> secure_dns_mode;
std::optional<bool> allow_dns_over_https_upgrade;
std::optional<std::vector<IPEndPoint>> fallback_doh_nameservers;
bool clear_hosts = false;
};
}
#endif