gio/auto/
network_service.rs1use gio_sys;
6use glib::object::Cast;
7use glib::object::IsA;
8use glib::signal::connect_raw;
9use glib::signal::SignalHandlerId;
10use glib::translate::*;
11use glib::GString;
12use glib_sys;
13use std::boxed::Box as Box_;
14use std::fmt;
15use std::mem::transmute;
16use SocketConnectable;
17
18glib_wrapper! {
19 pub struct NetworkService(Object<gio_sys::GNetworkService, gio_sys::GNetworkServiceClass, NetworkServiceClass>) @implements SocketConnectable;
20
21 match fn {
22 get_type => || gio_sys::g_network_service_get_type(),
23 }
24}
25
26impl NetworkService {
27 pub fn new(service: &str, protocol: &str, domain: &str) -> NetworkService {
28 unsafe {
29 from_glib_full(gio_sys::g_network_service_new(
30 service.to_glib_none().0,
31 protocol.to_glib_none().0,
32 domain.to_glib_none().0,
33 ))
34 }
35 }
36}
37
38pub const NONE_NETWORK_SERVICE: Option<&NetworkService> = None;
39
40pub trait NetworkServiceExt: 'static {
41 fn get_domain(&self) -> Option<GString>;
42
43 fn get_protocol(&self) -> Option<GString>;
44
45 fn get_scheme(&self) -> Option<GString>;
46
47 fn get_service(&self) -> Option<GString>;
48
49 fn set_scheme(&self, scheme: &str);
50
51 fn connect_property_scheme_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
52}
53
54impl<O: IsA<NetworkService>> NetworkServiceExt for O {
55 fn get_domain(&self) -> Option<GString> {
56 unsafe {
57 from_glib_none(gio_sys::g_network_service_get_domain(
58 self.as_ref().to_glib_none().0,
59 ))
60 }
61 }
62
63 fn get_protocol(&self) -> Option<GString> {
64 unsafe {
65 from_glib_none(gio_sys::g_network_service_get_protocol(
66 self.as_ref().to_glib_none().0,
67 ))
68 }
69 }
70
71 fn get_scheme(&self) -> Option<GString> {
72 unsafe {
73 from_glib_none(gio_sys::g_network_service_get_scheme(
74 self.as_ref().to_glib_none().0,
75 ))
76 }
77 }
78
79 fn get_service(&self) -> Option<GString> {
80 unsafe {
81 from_glib_none(gio_sys::g_network_service_get_service(
82 self.as_ref().to_glib_none().0,
83 ))
84 }
85 }
86
87 fn set_scheme(&self, scheme: &str) {
88 unsafe {
89 gio_sys::g_network_service_set_scheme(
90 self.as_ref().to_glib_none().0,
91 scheme.to_glib_none().0,
92 );
93 }
94 }
95
96 fn connect_property_scheme_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
97 unsafe extern "C" fn notify_scheme_trampoline<P, F: Fn(&P) + 'static>(
98 this: *mut gio_sys::GNetworkService,
99 _param_spec: glib_sys::gpointer,
100 f: glib_sys::gpointer,
101 ) where
102 P: IsA<NetworkService>,
103 {
104 let f: &F = &*(f as *const F);
105 f(&NetworkService::from_glib_borrow(this).unsafe_cast())
106 }
107 unsafe {
108 let f: Box_<F> = Box_::new(f);
109 connect_raw(
110 self.as_ptr() as *mut _,
111 b"notify::scheme\0".as_ptr() as *const _,
112 Some(transmute(notify_scheme_trampoline::<Self, F> as usize)),
113 Box_::into_raw(f),
114 )
115 }
116 }
117}
118
119impl fmt::Display for NetworkService {
120 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
121 write!(f, "NetworkService")
122 }
123}