use gio::glib;
use gio::traits::ProxyResolverExt;
use url::Url;
#[derive(Debug, Clone)]
pub struct GioProxyResolver {
resolver: gio::ProxyResolver,
}
impl GioProxyResolver {
pub fn new(resolver: gio::ProxyResolver) -> Self {
Self { resolver }
}
pub async fn lookup(&self, url: &Url) -> Result<Option<Url>, glib::Error> {
let proxies = self.resolver.lookup_future(url.as_str()).await?;
match proxies.get(0) {
None => Ok(None),
Some(url) if url == "direct://" => Ok(None),
Some(url) => Url::parse(url).map(Some).map_err(|parse_error| {
glib::Error::new(
glib::UriError::Failed,
&format!("Failed to parse proxy URL {}: {}", url, parse_error),
)
}),
}
}
}
impl Default for GioProxyResolver {
fn default() -> Self {
Self {
resolver: gio::ProxyResolver::default(),
}
}
}