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
// This file was generated by gir (https://github.com/gtk-rs/gir @ fe7a6ff+)
// from gir-files (https://github.com/gtk-rs/gir-files @ b215ee8)
// DO NOT EDIT

use AutocryptHeader;
use InternetAddressList;
use InternetAddressMailbox;
use ffi;
use glib::object::IsA;
use glib::translate::*;
use glib_ffi;
use gobject_ffi;
use std::mem;
use std::ptr;

glib_wrapper! {
    /// A list of Autocrypt headers, typically extracted from a GMimeMessage.
    ///
    /// # Implements
    ///
    /// [`AutocryptHeaderListExt`](trait.AutocryptHeaderListExt.html)
    pub struct AutocryptHeaderList(Object<ffi::GMimeAutocryptHeaderList, ffi::GMimeAutocryptHeaderListClass>);

    match fn {
        get_type => || ffi::g_mime_autocrypt_header_list_get_type(),
    }
}

impl AutocryptHeaderList {
    /// Creates a new `AutocryptHeaderList` object.
    ///
    /// # Returns
    ///
    /// a new `AutocryptHeaderList` object.
    pub fn new() -> AutocryptHeaderList {
        unsafe {
            from_glib_full(ffi::g_mime_autocrypt_header_list_new())
        }
    }
}

impl Default for AutocryptHeaderList {
    fn default() -> Self {
        Self::new()
    }
}

/// Trait containing all `AutocryptHeaderList` methods.
///
/// # Implementors
///
/// [`AutocryptHeaderList`](struct.AutocryptHeaderList.html)
pub trait AutocryptHeaderListExt {
    /// Adds a the passed `AutocryptHeader` to the list.
    /// ## `header`
    /// a `AutocryptHeader` object
    fn add(&self, header: &AutocryptHeader);

    /// Adds a new incomplete `AutocryptHeader` object for each
    /// InternetAddressMailbox found in `addresses`.
    /// ## `addresses`
    /// an `InternetAddressList` object
    ///
    /// # Returns
    ///
    /// the number of addresses added
    fn add_missing_addresses(&self, addresses: &InternetAddressList) -> u32;

    /// See how many Autocrypt headers are in the list.
    ///
    /// # Returns
    ///
    /// the number of available Autocrypt headers
    fn get_count(&self) -> u32;

    /// Get the Nth header in the list (returns `None` on error, or if `index` is out of bounds)
    /// ## `index`
    /// an index into the list
    ///
    /// # Returns
    ///
    /// a pointer to the Nth header in the list.
    fn get_header_at(&self, index: u32) -> Option<AutocryptHeader>;

    /// Gets the Autocrypt header corresponding to the given `mailbox`.
    /// ## `mailbox`
    /// an `InternetAddressMailbox` object
    ///
    /// # Returns
    ///
    /// a pointer to the header in the list which
    /// matches the requested address, or `None` if no such header exists in
    /// the list.
    fn get_header_for_address(&self, mailbox: &InternetAddressMailbox) -> Option<AutocryptHeader>;

    /// Remove all incomplete Autocrypt headers from the list.
    fn remove_incomplete(&self);
}

impl<O: IsA<AutocryptHeaderList>> AutocryptHeaderListExt for O {
    fn add(&self, header: &AutocryptHeader) {
        unsafe {
            ffi::g_mime_autocrypt_header_list_add(self.to_glib_none().0, header.to_glib_none().0);
        }
    }

    fn add_missing_addresses(&self, addresses: &InternetAddressList) -> u32 {
        unsafe {
            ffi::g_mime_autocrypt_header_list_add_missing_addresses(self.to_glib_none().0, addresses.to_glib_none().0)
        }
    }

    fn get_count(&self) -> u32 {
        unsafe {
            ffi::g_mime_autocrypt_header_list_get_count(self.to_glib_none().0)
        }
    }

    fn get_header_at(&self, index: u32) -> Option<AutocryptHeader> {
        unsafe {
            from_glib_none(ffi::g_mime_autocrypt_header_list_get_header_at(self.to_glib_none().0, index))
        }
    }

    fn get_header_for_address(&self, mailbox: &InternetAddressMailbox) -> Option<AutocryptHeader> {
        unsafe {
            from_glib_none(ffi::g_mime_autocrypt_header_list_get_header_for_address(self.to_glib_none().0, mailbox.to_glib_none().0))
        }
    }

    fn remove_incomplete(&self) {
        unsafe {
            ffi::g_mime_autocrypt_header_list_remove_incomplete(self.to_glib_none().0);
        }
    }
}