<?xml version="1.0"?>
<metadata>
  <!-- We need to remap size_t and ssize_t -->
  <attr path="/api/namespace/*/field[@type='size_t']" name="type">guint32</attr>
  <attr path="/api/namespace/*/*/return-type[@type='size_t']" name="type">guint32</attr>
  <attr path="/api/namespace/*/*/*/parameter[@type='size_t']" name="type">guint32</attr>
  <attr path="/api/namespace/*/*/*/parameter[@type='size_t*']" name="type">guint32*</attr>

  <!--<attr path="/api/namespace/*/field[@type='ssize_t']" name="type">gint32</attr>-->
  <attr path="/api/namespace/*/*/return-type[@type='ssize_t']" name="type">gint32</attr>
  <!--<attr path="/api/namespace/*/*/*/parameter[@type='ssize_t']" name="type">gint32</attr>-->
  <!--<attr path="/api/namespace/*/*/*/parameter[@type='ssize_t*']" name="type">gint32*</attr>-->

  <!-- Global / Locale -->
  <attr path="/api/namespace/class[@name='Global']/method[@name='UserCharsets']" name="name">GetUserCharsets</attr>
  <attr path="/api/namespace/class[@name='Locale']/method[@name='Charset']" name="name">GetCharset</attr>
  <attr path="/api/namespace/class[@name='Locale']/method[@name='Language']" name="name">GetLanguage</attr>

  <!-- Callback Functions -->
  <remove-node path="/api/namespace/callback[@name='HeaderForeachFunc']"/>

  <!-- Charset -->

  <!-- Common -->
  <!-- Remove the g_mime_strcase_hash/equal functions - they don't need to be public -->
  <!--<remove-node path="/api/namespace/class[@name='Strcase']"/>-->

  <!-- Events -->
  <!-- Remove the g_mime_event* functions - they don't need to be public -->
  <remove-node path="/api/namespace/struct[@name='Event']"/>
  <remove-node path="/api/namespace/callback[@name='EventCallback']"/>

  <!-- ContentDisposition -->
  <remove-node path="/api/namespace/object[@cname='GMimeContentDisposition']/field[@cname='param_hash']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeContentDisposition']/field[@cname='params']"/>

  <!-- ContentEncoding -->
  <!--<attr path="/api/namespace/class[@name='Content']/method[@name='EncodingFromString']" name="name">ContentEncodingFromString</attr>
  <attr path="/api/namespace/class[@name='Content']/method[@name='EncodingToString']" name="name">ContentEncodingToString</attr>
  <move-node path="/api/namespace/class[@name='Content']/method[@name='ContentEncodingFromString']">/api/namespace/class[@name='Utils']</move-node>
  <move-node path="/api/namespace/class[@name='Content']/method[@name='ContentEncodingToString']">/api/namespace/class[@name='Utils']</move-node>-->
  <remove-node path="/api/namespace/class[@name='Content']"/>

  <!-- ContentType -->
  <remove-node path="/api/namespace/object[@cname='GMimeContentType']/field[@cname='param_hash']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeContentType']/field[@cname='params']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeContentType']/field[@cname='subtype']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeContentType']/field[@cname='type']"/>
  
  <!-- Certificate -->
  <attr path="/api/namespace/object[@cname='GMimeCertificate']/method[@name='GetCreated']" name="name">GetCreationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeCertificate']/method[@name='SetCreated']" name="name">SetCreationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeCertificate']/method[@name='GetExpires']" name="name">GetExpirationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeCertificate']/method[@name='SetExpires']" name="name">SetExpirationDate</attr>
  
  <!-- CertificateList -->
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/field[@cname='array']"/>
  <attr path="/api/namespace/object[@name='CertificateList']" name="name">CertificateCollection</attr>
  <!-- We're going to implement the IList interface -->
  <add-node path="/api/namespace/object[@cname='GMimeCertificateList']">
    <implements>
      <interface name="IList"/>
    </implements>
  </add-node>
  <!-- Remove methods we're going to implement manually in GMimeCertificateList.custom -->
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Add']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Clear']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Contains']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='IndexOf']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Insert']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Length']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='Remove']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='RemoveAt']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='GetCertificate']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeCertificateList']/method[@name='SetCertificate']"/>

  <!-- Signature -->
  <attr path="/api/namespace/object[@cname='GMimeSignature']/method[@name='GetCreated']" name="name">GetCreationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeSignature']/method[@name='SetCreated']" name="name">SetCreationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeSignature']/method[@name='GetExpires']" name="name">GetExpirationDate</attr>
  <attr path="/api/namespace/object[@cname='GMimeSignature']/method[@name='SetExpires']" name="name">SetExpirationDate</attr>

  <!-- SignatureList -->
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/field[@cname='array']"/>
  <attr path="/api/namespace/object[@name='SignatureList']" name="name">SignatureCollection</attr>
  <!-- We're going to implement the IList interface -->
  <add-node path="/api/namespace/object[@cname='GMimeSignatureList']">
    <implements>
      <interface name="IList"/>
    </implements>
  </add-node>
  <!-- Remove methods we're going to implement manually in GMimeSignatureList.custom -->
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Add']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Clear']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Contains']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='IndexOf']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Insert']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Length']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='Remove']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='RemoveAt']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='GetSignature']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeSignatureList']/method[@name='SetSignature']"/>
  
  <!-- CryptoContext -->

  <!-- DataWrapper -->
  <attr path="/api/namespace/object[@cname='GMimeDataWrapper']/method[@name='GetStream']" name="name">GetGMimeStream</attr>
  <attr path="/api/namespace/object[@cname='GMimeDataWrapper']/method[@name='SetStream']" name="name">SetGMimeStream</attr>

  <!-- Encoding -->
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='inbuf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='inbuf']" name="array">true</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='inlen']" name="name">n_inbuf</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='uubuf']" name="type">guint8*</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='uubuf']" name="array">true</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='outbuf']" name="type">guint8*</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='outbuf']" name="array">true</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='state']" name="pass_as">ref</attr>
  <attr path="/api/namespace/struct[@name='Encoding']/*/*/parameter[@name='save']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Yencode']/method[@cname='g_mime_yencode_close']" name="name">yEncodeClose</attr>
  <attr path="/api/namespace/class[@name='Yencode']/method[@cname='g_mime_yencode_step']" name="name">yEncodeStep</attr>
  <attr path="/api/namespace/class[@name='Global']/method[@cname='g_mime_ydecode_step']" name="name">yDecodeStep</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='inbuf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='inbuf']" name="array">true</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='inlen']" name="name">n_inbuf</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='outbuf']" name="type">guint8*</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='outbuf']" name="array">true</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='state']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='pcrc']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Yencode']/*/*/parameter[@name='crc']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='inbuf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='inbuf']" name="array">true</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='inlen']" name="name">n_inbuf</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='outbuf']" name="type">guint8*</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='outbuf']" name="array">true</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='state']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='pcrc']" name="pass_as">ref</attr>
  <attr path="/api/namespace/class[@name='Global']/*/*/parameter[@name='crc']" name="pass_as">ref</attr>
  <move-node path="/api/namespace/class[@name='Yencode']/method[@name='yEncodeClose']">/api/namespace/struct[@name='Encoding']</move-node>
  <move-node path="/api/namespace/class[@name='Yencode']/method[@name='yEncodeStep']">/api/namespace/struct[@name='Encoding']</move-node>
  <move-node path="/api/namespace/class[@name='Global']/method[@name='yDecodeStep']">/api/namespace/struct[@name='Encoding']</move-node>

  <!-- Enumerations -->
  <attr path="/api/namespace/enum/member[@cname='GMIME_ENCODING_CONSTRAINT_7BIT']" name="name">SevenBit</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_ENCODING_CONSTRAINT_8BIT']" name="name">EightBit</attr>

  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_DEFAULT']" name="name">Default</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_7BIT']" name="name">SevenBit</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_8BIT']" name="name">EightBit</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_BINARY']" name="name">Binary</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_BASE64']" name="name">Base64</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_QUOTEDPRINTABLE']" name="name">QuotedPrintable</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_CONTENT_ENCODING_UUENCODE']" name="name">UuEncode</attr>

  <attr path="/api/namespace/enum/member[@cname='GMIME_STREAM_SEEK_SET']" name="value">0</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_STREAM_SEEK_CUR']" name="value">1</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_STREAM_SEEK_END']" name="value">2</attr>

  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_NONE']" name="name">None</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_EXPSIG']" name="name">ExpiredSignature</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_NO_PUBKEY']" name="name">NoPublicKey</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_EXPKEYSIG']" name="name">ExpiredSignatureKey</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_REVKEYSIG']" name="name">RevokedSignatureKey</attr>
  <attr path="/api/namespace/enum/member[@cname='GMIME_SIGNATURE_ERROR_UNSUPP_ALGO']" name="name">UnsupportedAlgorithm</attr>

  <!-- Filter -->
  <attr path="/api/namespace/object[@cname='GMimeFilter']" name="abstract">1</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/method[@cname='g_mime_filter_filter']" name="name">ApplyFilter</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/*/*/parameter[@name='inbuf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/*/*/parameter[@name='inbuf']" name="array">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/*/*/parameter[@name='inlen']" name="name">n_inbuf</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/*/*/parameter[@name='outbuf']" name="type">guint8**</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/*/*/parameter[@name='outbuf']" name="array">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/method[@name='Backup']/*/parameter[@name='data']" name="name">buf</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/method[@name='Backup']/*/parameter[@name='buf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/method[@name='Backup']/*/parameter[@name='buf']" name="array">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilter']/method[@name='Backup']/*/parameter[@name='length']" name="name">n_buf</attr>

  <!-- FilterBest -->
  <attr path="/api/namespace/object[@cname='GMimeFilterBest']/method[@cname='g_mime_filter_best_charset']" name="name">GetBestCharset</attr>
  <attr path="/api/namespace/object[@cname='GMimeFilterBest']/method[@cname='g_mime_filter_best_encoding']" name="name">GetBestEncoding</attr>

  <!-- GpgContext -->
  
  <!-- Header -->
  <remove-node path="/api/namespace/struct[@cname='GMimeHeader']"/>

  <!-- HeaderList -->
  <!-- We're going to implement the IEnumerable interface -->
  <add-node path="/api/namespace/object[@cname='GMimeHeaderList']">
    <implements>
      <interface name="IEnumerable"/>
    </implements>
  </add-node>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@cname='g_mime_header_list_foreach']"/>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@name='SetStream']" name="hidden">true</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@name='GetStream']" name="hidden">true</attr>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@name='Get']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@name='Set']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderList']/method[@name='GetIter']"/>
  
  <!-- HeaderIter -->
  <!-- This should really be made to be internal, but I don't know how to do that... -->
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']/method[@name='SetValue']/return-type" name="type">void</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']/method[@name='First']" name="name">MoveFirst</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']/method[@name='Last']" name="name">MoveLast</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']/method[@name='Next']" name="name">MoveNext</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']/method[@name='Prev']" name="name">MovePrev</attr>
  <attr path="/api/namespace/struct[@cname='GMimeHeaderIter']" name="opaque">true</attr>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderIter']/field[@cname='hdrlist']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderIter']/field[@cname='version']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeHeaderIter']/field[@cname='cursor']"/>

  <!-- iconv -->
  
  <!-- iconv-utils -->

  <!-- InternetAddress -->
  <attr path="/api/namespace/object[@cname='InternetAddress']" name="abstract">1</attr>
  <remove-node path="/api/namespace/object[@cname='InternetAddress']/field[@cname='priv']"/>
  
  <!-- InternetAddressGroup -->
  <remove-node path="/api/namespace/object[@cname='InternetAddressGroup']/method[@name='AddMember']"/>
  
  <!-- InternetAddressMailbox -->
  <attr path="/api/namespace/object[@cname='InternetAddressMailbox']/method[@name='GetAddr']" name="name">GetAddress</attr>
  <attr path="/api/namespace/object[@cname='InternetAddressMailbox']/method[@name='SetAddr']" name="name">SetAddress</attr>
  
  <!-- InternetAddressList -->
  <!-- Remove internal methods/fields/signals -->
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/field[@cname='array']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/field[@cname='priv']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Writer']"/>
  <!-- We're going to implement the IList interface -->
  <add-node path="/api/namespace/object[@cname='InternetAddressList']">
    <implements>
      <interface name="IList"/>
    </implements>
  </add-node>
  <!-- Remove methods we're going to implement manually in InternetAddressList.custom -->
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Add']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Clear']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Contains']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='IndexOf']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Insert']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Length']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='ParseString']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Remove']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='RemoveAt']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='GetAddress']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='SetAddress']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='ToString']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Prepend']"/>
  <remove-node path="/api/namespace/object[@cname='InternetAddressList']/method[@name='Append']"/>
  
  <!-- Message -->
  <attr path="/api/namespace/object[@cname='GMimeMessage']/method[@name='GetAllRecipients']/return-type" name="owned">true</attr>
  <!-- We implement these properties by hand, hide them. -->
  <remove-node path="/api/namespace/object[@cname='GMimeMessage']/method[@cname='g_mime_message_get_recipients']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMessage']/method[@cname='g_mime_message_get_date']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMessage']/method[@cname='g_mime_message_set_date']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMessage']/method[@cname='g_mime_message_foreach']"/>

  <!-- MessagePart -->

  <!-- MessagePartial -->
  <add-node path="/api/namespace/object[@cname='GMimeMessagePartial']/method[@name='ReconstructMessage']/parameters"><parameter name="partials" type="GMimeMessagePartial**" array="true"/></add-node>
  <attr path="/api/namespace/object[@cname='GMimeMessagePartial']/method[@name='ReconstructMessage']" name="shared">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeMessagePartial']/method[@name='ReconstructMessage']/*/parameter[@name='num']" name="name">n_partials</attr>

  <!-- Multipart -->
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Foreach']"/>
  <!-- We're going to implement the IList interface -->
  <add-node path="/api/namespace/object[@cname='GMimeMultipart']">
    <implements>
      <interface name="IList"/>
    </implements>
  </add-node>
  <!-- Remove methods we're going to implement manually in GMimeMultipart.custom -->
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Add']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Clear']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='GetCount']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Contains']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='IndexOf']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Insert']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Remove']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='RemoveAt']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='Replace']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeMultipart']/method[@name='GetPart']"/>

  <!-- MultipartEncrypted -->
  <attr path="/api/namespace/object[@cname='GMimeMultipartEncrypted']/method[@name='Decrypt']/*/parameter[@name='result']" name="pass_as">out</attr>
  
  <!-- MultipartSigned -->
  
  <!-- Object -->
  <attr path="/api/namespace/object[@cname='GMimeObject']" name="name">Entity</attr>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/constructor[@cname='g_mime_object_new']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/constructor[@cname='g_mime_object_new_type']"/>
  <!-- Clean up some unnecessary helper methods from GMimeObject -->
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_get_disposition']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_set_disposition']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_get_content_type_parameter']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_set_content_type_parameter']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_get_content_disposition_parameter']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_set_content_disposition_parameter']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_prepend_header']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_append_header']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_remove_header']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_get_header']"/>
  <remove-node path="/api/namespace/object[@cname='GMimeObject']/method[@cname='g_mime_object_set_header']"/>

  <!-- Param -->
  <remove-node path="/api/namespace/struct[@cname='GMimeParam']/field[@cname='value']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeParam']/field[@cname='name']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeParam']/field[@cname='next']"/>

  <!-- Parser -->
  <attr path="/api/namespace/object[@cname='GMimeParser']/method[@name='ConstructPart']/return-type" name="owned">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeParser']/method[@name='ConstructMessage']/return-type" name="owned">true</attr>

  <!-- Parse Utils -->
  <!-- Remove some utility parser functions: decode_word, decode_lwsp, etc -->
  <!--<remove-node path="/api/namespace/class[@name='Global']/method[@name='ParseContentType']"/>-->
  <!--<remove-node path="/api/namespace/class[@name='Decode']"/>-->

  <!-- Part -->
  
  <!-- PartIter -->
  <remove-node path="/api/namespace/struct[@name='PartIter']"/>

  <!-- References -->
  <attr path="/api/namespace/struct[@name='References']" name="opaque">true</attr>
  <attr path="/api/namespace/struct[@name='References']/method[@name='Decode']" name="name">Parse</attr>
  <remove-node path="/api/namespace/struct[@name='References']/method[@name='Clear']"/>

  <!-- Stream IOVectors -->
  <remove-node path="/api/namespace/object[@cname='GMimeStream']/method[@cname='g_mime_stream_writev']"/>
  <remove-node path="/api/namespace/struct[@cname='GMimeStreamIOVector']"/>

  <!-- Stream -->
  <attr path="/api/namespace/object[@cname='GMimeStream']" name="abstract">1</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='Length']" name="name">GetLength</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='Read']/*/parameter[@name='buf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='Read']/*/parameter[@name='buf']" name="array">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='Write']/*/parameter[@name='buf']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='Write']/*/parameter[@name='buf']" name="array">true</attr>
  <attr path="/api/namespace/object[@cname='GMimeStream']/method[@name='WriteString']" name="name">Write</attr>

  <!-- StreamFile -->
  <attr path="/api/namespace/object[@cname='GMimeStreamFile']" name="hidden">true</attr>

  <!-- StreamMem -->
  <attr path="/api/namespace/object[@cname='GMimeStreamMem']/constructor[@cname='g_mime_stream_mem_new_with_byte_array']" name="hidden">true</attr>

  <!-- Utils -->
  <remove-node path="/api/namespace/class[@name='Utils']/method[@cname='g_mime_utils_decode_8bit']"/>
  <remove-node path="/api/namespace/class[@name='Utils']/method[@cname='g_mime_utils_text_is_8bit']"/>
  <attr path="/api/namespace/class[@name='Utils']/method[@cname='g_mime_utils_best_encoding']/*/parameter[@name='text']" name="type">const-guint8*</attr>
  <attr path="/api/namespace/class[@name='Utils']/method[@cname='g_mime_utils_best_encoding']/*/parameter[@name='text']" name="array">true</attr>
  <attr path="/api/namespace/class[@name='Utils']/method[@cname='g_mime_utils_best_encoding']/*/parameter[@name='len']" name="name">n_text</attr>

  <!-- Yencode -->
  <!-- We've already moved the encoder/decoder functions into Encoding... -->
  <attr path="/api/namespace/class[@name='Yencode']" name="hidden">true</attr>

</metadata>
