// This code was autogenerated with `dbus-codegen-rust -g -m None -d org.freedesktop.Notifications -p /org/freedesktop/Notifications`, see https://github.com/diwic/dbus-rs
use dbus;
#[allow(unused_imports)]
use dbus::arg;
use dbus::blocking;

pub trait OrgFreedesktopDBusProperties {
    fn get<R0: for<'b> arg::Get<'b> + 'static>(
        &self,
        interface_name: &str,
        property_name: &str,
    ) -> Result<R0, dbus::Error>;
    fn get_all(&self, interface_name: &str) -> Result<arg::PropMap, dbus::Error>;
    fn set<I2: arg::Arg + arg::Append>(
        &self,
        interface_name: &str,
        property_name: &str,
        value: I2,
    ) -> Result<(), dbus::Error>;
}

#[derive(Debug)]
pub struct OrgFreedesktopDBusPropertiesPropertiesChanged {
    pub interface_name: String,
    pub changed_properties: arg::PropMap,
    pub invalidated_properties: Vec<String>,
}

impl arg::AppendAll for OrgFreedesktopDBusPropertiesPropertiesChanged {
    fn append(&self, i: &mut arg::IterAppend) {
        arg::RefArg::append(&self.interface_name, i);
        arg::RefArg::append(&self.changed_properties, i);
        arg::RefArg::append(&self.invalidated_properties, i);
    }
}

impl arg::ReadAll for OrgFreedesktopDBusPropertiesPropertiesChanged {
    fn read(i: &mut arg::Iter) -> Result<Self, arg::TypeMismatchError> {
        Ok(Self {
            interface_name: i.read()?,
            changed_properties: i.read()?,
            invalidated_properties: i.read()?,
        })
    }
}

impl dbus::message::SignalArgs for OrgFreedesktopDBusPropertiesPropertiesChanged {
    const NAME: &'static str = "PropertiesChanged";
    const INTERFACE: &'static str = "org.freedesktop.DBus.Properties";
}

impl<T: blocking::BlockingSender, C: ::std::ops::Deref<Target = T>> OrgFreedesktopDBusProperties
    for blocking::Proxy<'_, C>
{
    fn get<R0: for<'b> arg::Get<'b> + 'static>(
        &self,
        interface_name: &str,
        property_name: &str,
    ) -> Result<R0, dbus::Error> {
        self.method_call(
            "org.freedesktop.DBus.Properties",
            "Get",
            (interface_name, property_name),
        )
        .and_then(|r: (arg::Variant<R0>,)| Ok((r.0).0))
    }

    fn get_all(&self, interface_name: &str) -> Result<arg::PropMap, dbus::Error> {
        self.method_call(
            "org.freedesktop.DBus.Properties",
            "GetAll",
            (interface_name,),
        )
        .and_then(|r: (arg::PropMap,)| Ok(r.0))
    }

    fn set<I2: arg::Arg + arg::Append>(
        &self,
        interface_name: &str,
        property_name: &str,
        value: I2,
    ) -> Result<(), dbus::Error> {
        self.method_call(
            "org.freedesktop.DBus.Properties",
            "Set",
            (interface_name, property_name, arg::Variant(value)),
        )
    }
}

pub trait OrgFreedesktopDBusIntrospectable {
    fn introspect(&self) -> Result<String, dbus::Error>;
}

impl<T: blocking::BlockingSender, C: ::std::ops::Deref<Target = T>> OrgFreedesktopDBusIntrospectable
    for blocking::Proxy<'_, C>
{
    fn introspect(&self) -> Result<String, dbus::Error> {
        self.method_call("org.freedesktop.DBus.Introspectable", "Introspect", ())
            .and_then(|r: (String,)| Ok(r.0))
    }
}

pub trait OrgFreedesktopDBusPeer {
    fn ping(&self) -> Result<(), dbus::Error>;
    fn get_machine_id(&self) -> Result<String, dbus::Error>;
}

impl<T: blocking::BlockingSender, C: ::std::ops::Deref<Target = T>> OrgFreedesktopDBusPeer
    for blocking::Proxy<'_, C>
{
    fn ping(&self) -> Result<(), dbus::Error> {
        self.method_call("org.freedesktop.DBus.Peer", "Ping", ())
    }

    fn get_machine_id(&self) -> Result<String, dbus::Error> {
        self.method_call("org.freedesktop.DBus.Peer", "GetMachineId", ())
            .and_then(|r: (String,)| Ok(r.0))
    }
}

pub trait OrgFreedesktopNotifications {
    fn set_noti_window_visibility(&self, value: bool) -> Result<(), dbus::Error>;
    fn toggle_dnd(&self) -> Result<bool, dbus::Error>;
    fn set_dnd(&self, state: bool) -> Result<(), dbus::Error>;
    fn get_dnd(&self) -> Result<bool, dbus::Error>;
    fn manually_close_notification(&self, id: u32, timeout: bool) -> Result<(), dbus::Error>;
    fn close_all_notifications(&self) -> Result<(), dbus::Error>;
    fn hide_latest_notification(&self, close: bool) -> Result<(), dbus::Error>;
    fn get_capabilities(&self) -> Result<Vec<String>, dbus::Error>;
    fn notify(
        &self,
        app_name: &str,
        replaces_id: u32,
        app_icon: &str,
        summary: &str,
        body: &str,
        actions: Vec<&str>,
        hints: arg::PropMap,
        expire_timeout: i32,
    ) -> Result<u32, dbus::Error>;
    fn close_notification(&self, id: u32) -> Result<(), dbus::Error>;
    fn get_server_information(&self) -> Result<(String, String, String, String), dbus::Error>;
    fn dnd(&self) -> Result<bool, dbus::Error>;
    fn set_dnd_(&self, value: bool) -> Result<(), dbus::Error>;
}

#[derive(Debug)]
pub struct OrgFreedesktopNotificationsOnDndToggle {
    pub dnd: bool,
}

impl arg::AppendAll for OrgFreedesktopNotificationsOnDndToggle {
    fn append(&self, i: &mut arg::IterAppend) {
        arg::RefArg::append(&self.dnd, i);
    }
}

impl arg::ReadAll for OrgFreedesktopNotificationsOnDndToggle {
    fn read(i: &mut arg::Iter) -> Result<Self, arg::TypeMismatchError> {
        Ok(Self { dnd: i.read()? })
    }
}

impl dbus::message::SignalArgs for OrgFreedesktopNotificationsOnDndToggle {
    const NAME: &'static str = "OnDndToggle";
    const INTERFACE: &'static str = "org.freedesktop.Notifications";
}

#[derive(Debug)]
pub struct OrgFreedesktopNotificationsNotificationClosed {
    pub id: u32,
    pub reason: u32,
}

impl arg::AppendAll for OrgFreedesktopNotificationsNotificationClosed {
    fn append(&self, i: &mut arg::IterAppend) {
        arg::RefArg::append(&self.id, i);
        arg::RefArg::append(&self.reason, i);
    }
}

impl arg::ReadAll for OrgFreedesktopNotificationsNotificationClosed {
    fn read(i: &mut arg::Iter) -> Result<Self, arg::TypeMismatchError> {
        Ok(Self {
            id: i.read()?,
            reason: i.read()?,
        })
    }
}

impl dbus::message::SignalArgs for OrgFreedesktopNotificationsNotificationClosed {
    const NAME: &'static str = "NotificationClosed";
    const INTERFACE: &'static str = "org.freedesktop.Notifications";
}

#[derive(Debug)]
pub struct OrgFreedesktopNotificationsActionInvoked {
    pub id: u32,
    pub action_key: String,
}

impl arg::AppendAll for OrgFreedesktopNotificationsActionInvoked {
    fn append(&self, i: &mut arg::IterAppend) {
        arg::RefArg::append(&self.id, i);
        arg::RefArg::append(&self.action_key, i);
    }
}

impl arg::ReadAll for OrgFreedesktopNotificationsActionInvoked {
    fn read(i: &mut arg::Iter) -> Result<Self, arg::TypeMismatchError> {
        Ok(Self {
            id: i.read()?,
            action_key: i.read()?,
        })
    }
}

impl dbus::message::SignalArgs for OrgFreedesktopNotificationsActionInvoked {
    const NAME: &'static str = "ActionInvoked";
    const INTERFACE: &'static str = "org.freedesktop.Notifications";
}

#[derive(Debug)]
pub struct OrgFreedesktopNotificationsNotificationReplied {
    pub id: u32,
    pub text: String,
}

impl arg::AppendAll for OrgFreedesktopNotificationsNotificationReplied {
    fn append(&self, i: &mut arg::IterAppend) {
        arg::RefArg::append(&self.id, i);
        arg::RefArg::append(&self.text, i);
    }
}

impl arg::ReadAll for OrgFreedesktopNotificationsNotificationReplied {
    fn read(i: &mut arg::Iter) -> Result<Self, arg::TypeMismatchError> {
        Ok(Self {
            id: i.read()?,
            text: i.read()?,
        })
    }
}

impl dbus::message::SignalArgs for OrgFreedesktopNotificationsNotificationReplied {
    const NAME: &'static str = "NotificationReplied";
    const INTERFACE: &'static str = "org.freedesktop.Notifications";
}

impl<T: blocking::BlockingSender, C: ::std::ops::Deref<Target = T>> OrgFreedesktopNotifications
    for blocking::Proxy<'_, C>
{
    fn set_noti_window_visibility(&self, value: bool) -> Result<(), dbus::Error> {
        self.method_call(
            "org.freedesktop.Notifications",
            "SetNotiWindowVisibility",
            (value,),
        )
    }

    fn toggle_dnd(&self) -> Result<bool, dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "ToggleDnd", ())
            .and_then(|r: (bool,)| Ok(r.0))
    }

    fn set_dnd(&self, state: bool) -> Result<(), dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "SetDnd", (state,))
    }

    fn get_dnd(&self) -> Result<bool, dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "GetDnd", ())
            .and_then(|r: (bool,)| Ok(r.0))
    }

    fn manually_close_notification(&self, id: u32, timeout: bool) -> Result<(), dbus::Error> {
        self.method_call(
            "org.freedesktop.Notifications",
            "ManuallyCloseNotification",
            (id, timeout),
        )
    }

    fn close_all_notifications(&self) -> Result<(), dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "CloseAllNotifications", ())
    }

    fn hide_latest_notification(&self, close: bool) -> Result<(), dbus::Error> {
        self.method_call(
            "org.freedesktop.Notifications",
            "HideLatestNotification",
            (close,),
        )
    }

    fn get_capabilities(&self) -> Result<Vec<String>, dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "GetCapabilities", ())
            .and_then(|r: (Vec<String>,)| Ok(r.0))
    }

    fn notify(
        &self,
        app_name: &str,
        replaces_id: u32,
        app_icon: &str,
        summary: &str,
        body: &str,
        actions: Vec<&str>,
        hints: arg::PropMap,
        expire_timeout: i32,
    ) -> Result<u32, dbus::Error> {
        self.method_call(
            "org.freedesktop.Notifications",
            "Notify",
            (
                app_name,
                replaces_id,
                app_icon,
                summary,
                body,
                actions,
                hints,
                expire_timeout,
            ),
        )
        .and_then(|r: (u32,)| Ok(r.0))
    }

    fn close_notification(&self, id: u32) -> Result<(), dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "CloseNotification", (id,))
    }

    fn get_server_information(&self) -> Result<(String, String, String, String), dbus::Error> {
        self.method_call("org.freedesktop.Notifications", "GetServerInformation", ())
    }

    fn dnd(&self) -> Result<bool, dbus::Error> {
        <Self as blocking::stdintf::org_freedesktop_dbus::Properties>::get(
            self,
            "org.freedesktop.Notifications",
            "Dnd",
        )
    }

    fn set_dnd_(&self, value: bool) -> Result<(), dbus::Error> {
        <Self as blocking::stdintf::org_freedesktop_dbus::Properties>::set(
            self,
            "org.freedesktop.Notifications",
            "Dnd",
            value,
        )
    }
}
