#include "service.h"
namespace
{
struct ProbeFactory
{
std::chrono::seconds timeout;
const std::optional<std::string>& url;
mw::E<std::unique_ptr<ProbeInterface>> operator()(
const HttpEndpoint& endpoint) const
{
if(endpoint.url.empty() && url)
{
return ::createProbe(HttpEndpoint{*url}, timeout);
}
return ::createProbe(endpoint, timeout);
}
template<typename Endpoint>
mw::E<std::unique_ptr<ProbeInterface>> operator()(
const Endpoint& endpoint) const
{
return ::createProbe(endpoint, timeout);
}
};
}
mw::E<std::unique_ptr<ProbeInterface>> Service::createProbe() const
{
return std::visit(ProbeFactory{config.timeout, config.url},
config.endpoint);
}