1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use crate::SocketConnectable;
use glib::object::Cast;
use glib::object::IsA;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use std::boxed::Box as Box_;
use std::fmt;
use std::mem::transmute;
glib::wrapper! {
/// Like [`NetworkAddress`][crate::NetworkAddress] does with hostnames, [`NetworkService`][crate::NetworkService]
/// provides an easy way to resolve a SRV record, and then attempt to
/// connect to one of the hosts that implements that service, handling
/// service priority/weighting, multiple IP addresses, and multiple
/// address families.
///
/// See [`SrvTarget`][crate::SrvTarget] for more information about SRV records, and see
/// [`SocketConnectable`][crate::SocketConnectable] for an example of using the connectable
/// interface.
///
/// # Implements
///
/// [`NetworkServiceExt`][trait@crate::prelude::NetworkServiceExt], [`trait@glib::ObjectExt`], [`SocketConnectableExt`][trait@crate::prelude::SocketConnectableExt]
#[doc(alias = "GNetworkService")]
pub struct NetworkService(Object<ffi::GNetworkService, ffi::GNetworkServiceClass>) @implements SocketConnectable;
match fn {
type_ => || ffi::g_network_service_get_type(),
}
}
impl NetworkService {
pub const NONE: Option<&'static NetworkService> = None;
/// Creates a new [`NetworkService`][crate::NetworkService] representing the given `service`,
/// `protocol`, and `domain`. This will initially be unresolved; use the
/// [`SocketConnectable`][crate::SocketConnectable] interface to resolve it.
/// ## `service`
/// the service type to look up (eg, "ldap")
/// ## `protocol`
/// the networking protocol to use for `service` (eg, "tcp")
/// ## `domain`
/// the DNS domain to look up the service in
///
/// # Returns
///
/// a new [`NetworkService`][crate::NetworkService]
#[doc(alias = "g_network_service_new")]
pub fn new(service: &str, protocol: &str, domain: &str) -> NetworkService {
unsafe {
from_glib_full(ffi::g_network_service_new(
service.to_glib_none().0,
protocol.to_glib_none().0,
domain.to_glib_none().0,
))
}
}
}
/// Trait containing all [`struct@NetworkService`] methods.
///
/// # Implementors
///
/// [`NetworkService`][struct@crate::NetworkService]
pub trait NetworkServiceExt: 'static {
/// Gets the domain that `self` serves. This might be either UTF-8 or
/// ASCII-encoded, depending on what `self` was created with.
///
/// # Returns
///
/// `self`'s domain name
#[doc(alias = "g_network_service_get_domain")]
#[doc(alias = "get_domain")]
fn domain(&self) -> glib::GString;
/// Gets `self`'s protocol name (eg, "tcp").
///
/// # Returns
///
/// `self`'s protocol name
#[doc(alias = "g_network_service_get_protocol")]
#[doc(alias = "get_protocol")]
fn protocol(&self) -> glib::GString;
/// Gets the URI scheme used to resolve proxies. By default, the service name
/// is used as scheme.
///
/// # Returns
///
/// `self`'s scheme name
#[doc(alias = "g_network_service_get_scheme")]
#[doc(alias = "get_scheme")]
fn scheme(&self) -> glib::GString;
/// Gets `self`'s service name (eg, "ldap").
///
/// # Returns
///
/// `self`'s service name
#[doc(alias = "g_network_service_get_service")]
#[doc(alias = "get_service")]
fn service(&self) -> glib::GString;
/// Set's the URI scheme used to resolve proxies. By default, the service name
/// is used as scheme.
/// ## `scheme`
/// a URI scheme
#[doc(alias = "g_network_service_set_scheme")]
fn set_scheme(&self, scheme: &str);
#[doc(alias = "scheme")]
fn connect_scheme_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
}
impl<O: IsA<NetworkService>> NetworkServiceExt for O {
fn domain(&self) -> glib::GString {
unsafe {
from_glib_none(ffi::g_network_service_get_domain(
self.as_ref().to_glib_none().0,
))
}
}
fn protocol(&self) -> glib::GString {
unsafe {
from_glib_none(ffi::g_network_service_get_protocol(
self.as_ref().to_glib_none().0,
))
}
}
fn scheme(&self) -> glib::GString {
unsafe {
from_glib_none(ffi::g_network_service_get_scheme(
self.as_ref().to_glib_none().0,
))
}
}
fn service(&self) -> glib::GString {
unsafe {
from_glib_none(ffi::g_network_service_get_service(
self.as_ref().to_glib_none().0,
))
}
}
fn set_scheme(&self, scheme: &str) {
unsafe {
ffi::g_network_service_set_scheme(
self.as_ref().to_glib_none().0,
scheme.to_glib_none().0,
);
}
}
fn connect_scheme_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_scheme_trampoline<
P: IsA<NetworkService>,
F: Fn(&P) + 'static,
>(
this: *mut ffi::GNetworkService,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(NetworkService::from_glib_borrow(this).unsafe_cast_ref())
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::scheme\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
notify_scheme_trampoline::<Self, F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl fmt::Display for NetworkService {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("NetworkService")
}
}