use std::net::{Ipv4Addr, Ipv6Addr};
use proptest::{prelude::Strategy, prop_oneof};
mod domain;
mod ip_v4;
mod ip_v6;
pub fn ip_v6_host() -> impl Strategy<Value = (Ipv6Addr, String)> {
ip_v6::ip_v6().prop_map(move |(ip, repr)| (ip, format!("[{repr}]")))
}
#[derive(Debug)]
pub enum Host {
Domain(String),
Ipv6(Ipv6Addr, String),
Ipv4(Ipv4Addr, String),
}
pub fn host(max_label_count: usize) -> impl Strategy<Value = Host> {
prop_oneof![
domain::domain(max_label_count).prop_map(Host::Domain),
ip_v4::ip_v4().prop_map(|(ip, repr)| Host::Ipv4(ip, repr)),
ip_v6_host().prop_map(|(ip, repr)| Host::Ipv6(ip, repr))
]
}