#[cfg(feature = "std")]
use std::sync::Arc;
#[cfg(not(feature = "std"))]
use alloc::sync::Arc;
use crate::{device::Device, io::{IoImpl, KnownFunctionName, TcpListenerImpl, TcpStreamImpl, TlsStreamImpl, UdpSocketImpl}};
pub mod mdns;
pub mod tcp;
pub mod udp;
pub(crate) mod tls;
pub(crate) fn start_discovering<
Io: IoImpl<UdpSocket, TcpStream, TcpListener, TlsStream> + Unpin + 'static,
UdpSocket: UdpSocketImpl + Unpin + 'static,
TcpStream: TcpStreamImpl + Unpin + 'static,
TcpListener: TcpListenerImpl<TcpStream> + Unpin + 'static,
TlsStream: TlsStreamImpl + Unpin + 'static,
>(
device: Arc<Device<Io, UdpSocket, TcpStream, TcpListener, TlsStream>>,
) {
Arc::clone(&device).io_impl.spawn(KnownFunctionName::SetupUdp, Arc::clone(&device));
Arc::clone(&device).io_impl.spawn(KnownFunctionName::SetupMdns, device);
}