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
use super::client::ManagedAvahiClient;
use crate::Result;
use avahi_sys::{
    avahi_service_browser_free, avahi_service_browser_new, AvahiIfIndex, AvahiLookupFlags,
    AvahiProtocol, AvahiServiceBrowser, AvahiServiceBrowserCallback,
};
use libc::{c_char, c_void};
#[derive(Debug)]
pub struct ManagedAvahiServiceBrowser(*mut AvahiServiceBrowser);
impl ManagedAvahiServiceBrowser {
    
    
    pub fn new(
        ManagedAvahiServiceBrowserParams {
            client,
            interface,
            protocol,
            kind,
            domain,
            flags,
            callback,
            userdata,
        }: ManagedAvahiServiceBrowserParams,
    ) -> Result<Self> {
        let browser = unsafe {
            avahi_service_browser_new(
                client.inner(),
                interface,
                protocol,
                kind,
                domain,
                flags,
                callback,
                userdata,
            )
        };
        if browser.is_null() {
            Err("could not initialize Avahi service browser".into())
        } else {
            Ok(Self(browser))
        }
    }
}
impl Drop for ManagedAvahiServiceBrowser {
    fn drop(&mut self) {
        unsafe { avahi_service_browser_free(self.0) };
    }
}
#[derive(Builder, BuilderDelegate)]
pub struct ManagedAvahiServiceBrowserParams<'a> {
    client: &'a ManagedAvahiClient,
    interface: AvahiIfIndex,
    protocol: AvahiProtocol,
    kind: *const c_char,
    domain: *const c_char,
    flags: AvahiLookupFlags,
    callback: AvahiServiceBrowserCallback,
    userdata: *mut c_void,
}