ChangeLog

  1Version NEXT:
  2XXXX-YY-ZZ RELEASER <admin@example.com>
  3    * Breaking
  4        - The type of jingle_rtp::Description::ssrc has been changed from
  5          Option<String> to Option<u32>, in accordance with XEP-0167 version
  6          1.2.3 and RFC3550. (!602)
  7        - The ibr::Query struct has been split into FieldsQuery, RemoveQuery,
  8          LegacyQuery and FormsQuery, to make it reflect more how it gets
  9          used in XMPP.
 10    * Improvements:
 11        - Make Prioritys inner i8 pub, which had been broken since the
 12          conversion to xso. (!632)
 13
 14Version 0.22.0:
 152025-10-28 pep <pep@bouah.net>
 16    * Breaking
 17      - MIX (XEP-0369) has been removed, it has failed to gain any traction in
 18        the XMPP ecosystem and is actively being replaced with better
 19        alternatives based on MUC.
 20      - The `alternate_address` field of
 21        `xmpp_parsers::stanza_error::StanzaError` has been moved into the
 22        corresponding enum variants of the
 23        `xmpp_parsers::stanza_error::DefinedCondition` where it may occur.
 24      - The `xmpp_parsers::mix::Participant::jid` and `..::Mix::jid` fields
 25        are now of type `BareJid` (instead of `String`), as they should always
 26        have been. This influences various other places, such as these
 27        struct's constructors.
 28      - The rtt module has been changed to make use of xso on enums. This
 29        allows us to simplify the `Action` type to include all three possible
 30        variants directly in the enum, rather than as separate types which are
 31        then included in `Action`.  Also `Action::Erase::num` is now a wrapper
 32        type around u32, which lets us implement a custom Default on it.
 33        (!416)
 34      - The cert_management module is now using `Option` instead of `bool` to
 35        check whether a child element is present or not, as this is currently
 36        implemented in xso.  We might revert that change if we implement flag
 37        metas in xso before the next release.
 38      - The forwarding module now hardcodes that its child is a message in the
 39        jabber:client namespace.  It previously half-followed the schema, but
 40        nothing so far uses it for anything but this message.  We can always
 41        change it again once any other specification allows e.g. presences or
 42        iqs.
 43      - Module `jingle_thumnails` has been renamed to `jingle_thumbnails`.  It
 44        now respect the latest version of the XEP, with the width and height
 45        being limited to 0..65535 and the media-type being optional (!475).
 46      - The bookmarks2 Conference `extensions` child is now an
 47        `Option<Extensions>` instead of a `Vec<Element>`, to distinguish
 48        between it being absent or empty (!472).
 49      - Replace all boolean attributes with the `bool` type, so that we can
 50        use them just like normal booleans. The following structs are removed:
 51        `pubsub::pubsub::Notify`, `bookmarks2::Autojoin`, `extdisco::Restricted`,
 52        `fast::Tls0Rtt`, `legacy_omemo::IsPreKey`, `mam::Complete`,
 53        `sm::ResumeAttr` (!476)
 54      - `cert_management::Append::no_cert_management`,
 55        `cert_management::Item::no_cert_management`,
 56        `ssm::StreamManagement::optional` and `starttls::StartTls::required` are
 57        now proper bools, instead of `Option<ZeroSizedType>` (!518)
 58      - `bookmarks::Conference` and `bookmarks2::Conference` use ResourcePart to store
 59        the optional nickname instead of a String (!485)
 60      - pubsub Item and pubsub#event Item are now distinct structs (!503)
 61      - `message::Message` id field is now `Option<message::Id>` instead of
 62        `Option<String>` (!504)
 63      - `message_correction::Replace` id field is now Id instead of String (!504)
 64      - `Caps::hash` has been split into `Caps::hash` (the algo) and
 65        `Caps::ver` (the actual hash), to reflect the attributes (!517)
 66      - `muc::MucUser` now has an `invite` field
 67      - vCard-temp queries have been split into vcard::VCardQuery (!522)
 68      - http_uploads Header type has been split into HeaderName, an enum
 69        containing only the name of the header, and the Header struct with
 70        both a name and a value (!530)
 71      - `pubsub::Event` is now the wrapper for the `pubsub::event::Payload` enum,
 72        and the PublishedItems and RetractedItems have been merged into the
 73        Items sub-struct.  These replace the previous PubSubEvent enum (!531)
 74      - `Handshake::from_password_and_stream_id()` became
 75        `Handshake::from_stream_id_and_password()`, with the two parameters
 76        having been exchanged, and the stream_id is now a String instead of
 77        &str.
 78      - `pubsub::Owner` is now a wrapper for the `pubsub::owner::Paylolad` enum,
 79        and all its direct children have been merged into this enum (!532)
 80      - `time::TimeResult` has been ported to use xso. Use From/Into to convert
 81        it to/from `chrono::DateTime` values. The numbered member `0` does not
 82        exist anymore (!551).
 83      - `stanza_error::StanzaError` has been ported to use xso (!552).
 84      - data_forms has been ported to use xso. This introduces a couple subtle
 85        breaking changes for `data_forms::DataForm`, in particular:
 86
 87          - the `from_type` member was replaced by a pair of functions.
 88          - if the form contains a FORM_TYPE field, it will be part of the
 89            `fields` member (unlike before, where that field was removed).
 90      - `message::Message` has been ported to use xso (!560). This causes several
 91        breaking changes:
 92
 93        1. the `message::Body` and `message::Subject` newtypes have been removed
 94           and replaced by bare Strings
 95        2. a `message::Lang` newtype has been introduced for the language of
 96           message parts.
 97        3. the `message::Thread` type was converted from a single-element
 98           tuple-like struct to a struct with named fields to support the
 99           optional `parent` attribute.
100      - `presence::Presence` has been ported to use xso (!477). It also uses the
101        `message::Lang` newtype since !561.
102      - `iq::Iq` has been ported to use xso (!572). That entails a couple
103        breaking changes:
104
105        - The IqType type has been removed and loosely replaced by the
106          IqPayload type.
107        - The Iq type is now an enum. Access to `from`, `to` and `id` needs
108          to happen via the provided accessor functions, by `match`-ing the
109          enum variant or by splitting the Iq into its IqHeader and IqPayload
110          using the `split()` method.
111        - The inverse is possible through the `assemble()` methods on
112          IqPayload, IqHeader and Iq, whichever is more convenient.
113    * New parsers/serialisers:
114      - Stream Features (RFC 6120) (!400)
115      - Spam Reporting (XEP-0377) (!506)
116      - Extensible SASL Profile (XEP-0388)
117      - SASL Channel-Binding Type Capability (XEP-0440)
118      - Stream Limits Advertisement (XEP-0478)
119      - Message Displayed Synchronization (XEP-0490)
120      - RFC 6120 stream errors and starttls nonzas
121      - XEP-0045 mediated invites
122      - Push Notifications (XEP-0357) (!543)
123      - JSON Containers (XEP-0335) (!546)
124      - Verifying HTTP Requests via XMPP (XEP-0070)
125    * Improvements:
126      - Add support for undocumented `<optional/> in XEP-0198 feature
127        advertisement, for compatibility with servers in the wild.
128      - Add support application-specific error conditions in XEP-0198
129      - Keep unsupported vCard elements as `minidom::Element`, so that they
130        get serialized back instead of being dropped.  We now also test for
131        the size of these elements (!472).
132      - Add `Message::extract_valid_payload` method to warn in case of failure
133        and return simply `Option<T>` instead of `Result<Option<T>>` (!497)
134      - Add `Message::get_best_body_cloned` and `Message::get_best_subject_cloned`
135        to clone automatically when performance is not an issue (!497)
136      - Fix compatibility to uuid 1.12
137      - Implement Default for Tune
138      - Re-export `xso::error::FromElementError`.
139      - Fix a few tests behind 'component' feature
140      - Fix some Clippy warnings
141
142Version 0.21.0:
1432024-07-25 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
144    * New parsers/serialisers:
145        - Private XML Storage (XEP-0049), only enough for bookmarks.
146        - vcard-temp (XEP-0054), only enough for the PHOTO element.
147        - Out of Band Data (XEP-0066), only the annotation part used for file
148          sharing in Conversations.
149        - Data Forms Validation (XEP-0122).
150        - vCard-Based Avatars (XEP-0153).
151        - Jingle Content Thumbnails (XEP-264).
152        - Bind 2 (XEP-0386).
153        - Fast Authentication Streamlining Tokens (XEP-0484).
154    * Improvements:
155        - Replace many usages of our custom macros with the new xso crate,
156          which will ultimately allow streaming directly from the rxml XML
157          parser (in a SAX way) into our parsed structs, without going through
158          minidom in the middle.
159        - Re-export the jid and minidom modules, not their inner symbols.
160        - Use edition 2021, no more use TryFrom/TryInto! \o/
161        - Add serde feature, passed to jid crate
162        - Update XEP-0084 avatars to 1.1.4, which allows for avatars bigger
163          than 64KiB.
164        - Make it easy to convert from bookmarks1 to bookmarks2.
165        - Ignore the 'code' attribute on errors, deprecated with XEP-0086 in
166          2007 but still sent by some legacy clients or servers it seems.
167        - Implement flip-page and metadata for XEP-0313 (Message Archive
168          Management).
169        - Add support for XEP-0059 (Result Set Management) for XEP-0030
170          disco#items.
171        - When disable-validation is enable, stop validating XEP-0030 rules.
172        - Make TryFrom<Element> chainable.
173        - Add a Message::extract_payload() function.
174        - Add a PubSubEvent::node_name() function, to simplify matching on the
175          node name from any of the enum variants.
176        - PubSub elements can now be compared for equality.
177        - Ignore incorrect FORM_TYPE fields as per XEP-0068.
178        - Allow fixed fields and desc in XEP-0004 (Data Forms).
179        - Add constructors for DataForm and Field, to simplify their creation.
180        - Make it possible to specify an alternate JID on <gone/> and
181          <redirect/> stanza errors.
182    * Bugfixes:
183        - Fix XEP-0257 serialisation
184        - Fix stanza error parsing of multiple languages.
185        - Fix all typos in the codebase found by codespell.
186
187Version 0.20.0:
1882023-08-17 Maxime pep Buquet <pep@bouah.net>, Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
189    * New parsers/serialisers:
190        - Message Reactions (XEP-0444)
191    * Improvements:
192        - Update dependencies
193        - muc::user::Item: Added with_ helpers
194        - Correct cargo doc warnings
195        - Presence now has constructors for each variant so you don't have to
196          import presence::Type, where Presence::available represents type None (#79)
197        - Presence::with_payload builds a payload into the presence (#79)
198        - Message now has constructors for each type ; Message::new still builds a Chat type (#78)
199        - Message::with_body builder method appends a body in a given language to the message (#78)
200        - Derive PartialEq on Iq
201        - impl MessagePayload for MucUser
202        - Add MucUser::with_statuses and ::with_items
203    * Breaking changes:
204        - Removed the 'serde' feature. Add it directly by using 'jid'.
205          `jid = { version = "*", features = ["serde"] }`.
206
207Version 0.19.2:
2082022-12-17  Maxime pep Buquet <pep@bouah.net>
209    * Improvements:
210        - Derive PartialEq on Presence
211        - impl PresencePayload for muc::user::MucUser.
212        - New muc::user::Status::ServiceErrorKick variant for the 333 status
213          code.
214        - Update deprecated chrono code (FixedOffset::{east,west} to
215          {east,west}_opt).
216
217Version 0.19.1:
2182022-07-13  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
219    * New parsers/serialisers:
220        - Add In-Band Real Time Text support
221        - Add OMEMO support
222    * Improvements:
223        - bookmarks 2: uncomment test
224
225Version 0.19.0:
2262022-03-07  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
227    * New parsers/serialisers:
228        - External Service Discovery (XEP-0215).
229        - HTTP File Upload (XEP-0363).
230        - Message Archive Management Preferences (XEP-0441), actually spun off
231          from XEP-0313.
232    * Improvements:
233        - Add constructor helpers for more structs.
234        - Impl Eq and Hash on disco::Feature (thanks Paul!).
235        - Impl MessagePayload for PubSubEvent (thanks Paul!).
236        - Bump minidom to 0.14.
237        - Bump the hash crates to their latest version.
238        - Run clippy.
239        - Rename the directory to parsers, to avoid colliding prefix with
240          xmpp-rs.
241    * Breaking changes:
242        - Bump bookmarks 2 to version 1.1.3.
243        - Use proper types in Jingle specs (XEP-0294 and XEP-0339).
244        - Move preferences from MAM to MAM prefs, following the spec split.
245
246Version 0.18.1:
2472021-01-13  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
248    * Bugfixes:
249        - Bump minidom to 0.13, as 0.12.1 got yanked.
250
251Version 0.18.0:
2522021-01-13  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
253    * New parsers/serialisers:
254        - Jingle Raw UDP Transport Method (XEP-0177).
255        - Jingle RTP Header Extensions Negotiation (XEP-0294).
256        - Jingle Grouping Framework (XEP-0338).
257        - Mediated Information eXchange (MIX) (XEP-0369).
258    * Improvements:
259        - Everything is now PartialEq!
260        - Add "serde" feature to enable "jid/serde".
261        - Implement more of XEP-0060.
262        - Bump XEP-0167 to version 1.2.0, adding rtcp-mux.
263        - Bump XEP-0176 to version 1.1, fixing interoperability with other
264          clients.
265        - Bump XEP-0402 to version 1.1.1, bumping its namespace and adding
266          support for extension data.
267        - Bump all dependencies to their latest version.
268        - Some more helper constructors.
269        - Make public some stuff that should have been public from the very
270          beginning.
271    * Bugfixes:
272        - Jingle::set_reason() does what it says now (copy/paste error).
273        - Bookmarks names are now optional like they should.
274
275Version 0.17.0:
2762020-02-15  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>, Maxime pep Buquet <pep@bouah.net>, Paul Fariello <paul@fariello.eu>
277    * Improvements:
278        - Add serialization tests where possible
279        - Use minidom's NSChoice API for Jingle parser
280        - Remove NamespaceAwareCompare. Move to minidom
281    * Breaking changes:
282        - Prevent generate_serializer macro from adding another layer of Node.
283          Fixes some serializers.
284        - ecaps2: Use the Error type instead of ()
285
286Version 0.16.0:
2872019-10-15  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
288    * New parsers/serialisers:
289        - Client Certificate Management for SASL EXTERNAL (XEP-0257)
290        - JID Prep (XEP-0328)
291        - Client State Indication (XEP-0352)
292        - OpenPGP for XMPP (XEP-0373)
293        - Bookmarks 2 (This Time it's Serious) (XEP-0402)
294        - Anonymous unique occupant identifiers for MUCs (XEP-0421)
295        - Source-Specific Media Attributes in Jingle (XEP-0339)
296        - Jingle RTP Feedback Negotiation (XEP-0293)
297    * Breaking changes:
298        - Presence constructors now take Into<Jid> and assume Some.
299    * Improvements:
300        - CI: refactor, add caching
301        - Update jid-rs to 0.8
302
303Version 0.15.0:
3042019-09-06  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
305    * New parsers/serialisers:
306        - XHTML-IM (XEP-0071)
307        - User Tune (XEP-0118)
308        - Bits of Binary (XEP-0231)
309        - Message Carbons (XEP-0280)
310    * Breaking changes:
311        - Stop reexporting TryFrom and TryInto, they are available in
312          std::convert nowadays.
313        - Bind has been split into BindQuery and BindResponse.
314    * Improvements:
315        - New DOAP file for a machine-readable description of the features.
316        - Add various parser and formatter helpers on Hash.
317
318Version 0.14.0:
3192019-07-13  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>, Maxime pep Buquet <pep@bouah.net>
320    * New parsers/serialisers:
321        - Entity Time (XEP-0202).
322    * Improvements:
323        - Microblog NS (XEP-0227).
324        - Update jid-rs dependency with jid split change (Jid, FullJid,
325          BareJid) and reexport them.
326        - Fix rustdoc options in Cargo.toml for docs.rs
327    * Breaking changes:
328        - Presence's show attribute is now Option<Show> and Show::None is no
329          more.
330
331Version 0.13.1:
3322019-04-12  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
333    * Bugfixes:
334        - Fix invalid serialisation of priority in presence.
335        - Bump image size to u16 from u8, as per XEP-0084 version 1.1.2.
336    * Improvements:
337        - Drop try_from dependency, as std::convert::TryFrom got
338          stabilised.
339
340Version 0.13.0:
3412019-03-20  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
342    * New parsers/serialisers:
343        - User Avatar (XEP-0084).
344        - Contact Addresses for XMPP Services (XEP-0157).
345        - Jingle RTP Sessions (XEP-0167).
346        - Jingle ICE-UDP Transport Method (XEP-0176).
347        - Use of DTLS-SRTP in Jingle Sessions (XEP-0320).
348    * Breaking changes:
349        - Make 'id' required on iq, as per RFC6120 §8.1.3.
350        - Refactor PubSub to have more type-safety.
351        - Treat FORM_TYPE as a special case in data forms, to avoid
352          duplicating it into a field.
353        - Add forgotten i18n to Jingle text element.
354    * Improvements:
355        - Add various helpers for hash representations.
356        - Add helpers constructors for multiple extensions (disco, caps,
357          pubsub, stanza_error).
358        - Use Into<String> in more constructors.
359        - Internal change on attribute declaration in macros.
360        - Reexport missing try_from::TryInto.
361
362Version 0.12.2:
3632019-01-16  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
364    * Improvements:
365        - Reexport missing util::error::Error and try_from::TryFrom.
366
367Version 0.12.1:
3682019-01-16  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
369    * Improvements:
370        - Reexport missing JidParseError from the jid crate.
371
372Version 0.12.0:
3732019-01-16  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
374    * Breaking changes:
375        - Update dependencies.
376        - Switch to git, upstream is now available at
377          https://gitlab.com/xmpp-rs/xmpp-parsers
378        - Switch to Edition 2018, this removes support for rustc
379          versions older than 1.31.
380        - Implement support for XEP-0030 2.5rc3, relaxing the ordering
381          of children in disco#info.
382    * Improvements:
383        - Test for struct size, to keep them known and avoid bloat.
384        - Add various constructors to make the API easier to use.
385        - Reexport Jid from the jid crate, to avoid any weird issue on
386          using different incompatible versions of the same crate.
387        - Add forgotten 'ask' attribute on roster item (thanks O01eg!).
388        - Use cargo-fmt on the codebase, to lower the barrier of entry.
389        - Add a disable-validation feature, disabling many checks
390          xmpp-parsers is doing.  This should be used for software
391          which want to let invalid XMPP pass through instead of being
392          rejected as invalid (thanks Astro-!).
393
394Version 0.11.1:
3952018-09-20  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
396    * Improvements:
397        - Document all of the modules.
398
399Version 0.11.0:
4002018-08-03  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
401    * Breaking changes:
402        - Split Software Version (XEP-0092) into a query and response
403          elements.
404        - Split RSM (XEP-0059) into a query and response elements.
405        - Fix type safety and spec issues in RSM and MAM (XEP-0313).
406        - Remove item@node and EmptyItems from PubSub events
407          (XEP-0060).
408    * Improvements:
409        - Document many additional modules.
410        - Add the <failure/> SASL nonza, as well as the SCRAM-SHA-256
411          and the two -PLUS mechanisms.
412
413Version 0.10.0:
4142018-07-31  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
415    * New parsers/serialisers:
416        - Added <stream:stream>, SASL and bind (RFC6120) parsers.
417        - Added a WebSocket <open/> (RFC7395) implementation.
418        - Added a Jabber Component <handshake/> (XEP-0114).
419        - Added support for User Nickname (XEP-0172).
420        - Added support for Stream Management (XEP-0198).
421        - Added support for Bookmarks (XEP-0048).
422        - Publish-Subscribe (XEP-0060) now supports requests in
423          addition to events.
424    * Breaking changes:
425        - Switch from std::error to failure to report better errors.
426        - Bump to minidom 0.9.1, and reexport minidom::Element.
427    * Improvements:
428        - Add getters for the best body and subject in message, to make
429          it easier to determine which one the user wants based on
430          their language preferences.
431        - Add constructors and setters for most Jingle elements, to
432          ease their creation.
433        - Add constructors for hash, MUC item, iq and more.
434        - Use more macros to simplify and factorise the code.
435        - Use traits to define iq payloads.
436        - Document more modules.
437
438Version 0.9.0:
4392017-10-31  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
440    * New parsers/serialisers:
441        - Blocking Command (XEP-0191) has been added.
442        - Date and Time Profiles (XEP-0082) has been added, replacing
443          ad-hoc use of chrono in various places.
444        - User Mood (XEP-0107) has been added.
445    * Breaking changes:
446        - Fix subscription="none" not being the default.
447        - Add more type safety to pubsub#event.
448        - Reuse Jingles ContentId type in JingleFT.
449        - Import the disposition attribute values in Jingle.
450    * Improvements:
451        - Refactor a good part of the code using macros.
452        - Simplify the parsing code wherever it makes sense.
453        - Check for children ordering in disco#info result.
454        - Finish implementation of <received/>, <checksum/> and
455          <range/> in JingleFT.
456        - Correctly serialise <ping/>, and test it.
457
458Version 0.8.0:
4592017-08-27  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
460    * New parsers/serialisers:
461        - iq:version (XEP-0092) has been added.
462        - Finally implement extension serialisation in disco.
463    * Breaking changes:
464        - Wrap even more elements into their own type, in jingle,
465          jingle_ft, roster, message.
466        - Split loose enums into multiple structs where it makes sense,
467          such as for IBB, StanzaId, Receipts.
468        - Split disco query and answer elements into their own struct,
469          to enforce more guarantees on both.
470    * Improvements:
471        - Use Vec::into_iter() more to avoid references and clones.
472        - Make data_forms propagate a media_element error.
473        - Document more of disco, roster, chatstates.
474        - Use the minidom feature of jid, for IntoAttributeValue.
475        - Add a component feature, changing the default namespace to
476          jabber:component:accept.
477        - Add support for indicating ranged transfers in jingle_ft.
478
479Version 0.7.1:
4802017-07-24  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
481    * Hotfixes:
482        - Stub out blake2 support, since the blake2 crate broke its API
483          between their 0.6.0 and 0.6.1 releases
484
485Version 0.7.0:
4862017-07-23  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
487    * New parsers/serialisers:
488        - Jingle Message Initialisation (XEP-0353) was added.
489        - The disco#items query (XEP-0030) is now supported, in
490          addition to the existing disco#info one.
491    * Breaking changes:
492        - Replaced many type aliases with proper wrapping structs.
493        - Split Disco into a query and a result part, since they have
494          very different constraints.
495        - Split IqPayload in three to avoid parsing queries as results
496          for example.
497    * Improvements:
498        - Use TryFrom from the try_from crate, thus removing the
499          dependency on nightly!
500        - Always implement From instead of Into, the latter is
501          generated anyway.
502        - Add helpers to construct your Presence stanza.
503
504Version 0.6.0:
5052017-06-27  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
506    * New parsers/serialisers:
507        - In-Band Registration (XEP-0077) was added.
508        - Multi-User Chat (XEP-0045) got expanded a lot, thanks pep.!
509    * Breaking changes:
510        - Added wrappers for Strings used as identifiers, to add type
511          safety.
512        - Use chronos DateTime for JingleFTs date element.
513        - Use Jid for JingleS5Bs jid attribute.
514    * Improvements:
515        - Use more macros for common tasks.
516        - Add a constructor for Message and Presence.
517        - Implement std::fmt::Display and std::error::Error on our
518          error type.
519        - Fix DataForms serialisation.
520        - Fix roster group serialisation.
521        - Update libraries, notably chrono whose version 0.3.1 got
522          yanked.
523
524Version 0.5.0:
5252017-06-11  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
526    * New parsers/serialisers:
527        - Implementation of the roster management protocol defined in
528          RFC 6121 §2.
529        - Implementation of PubSub events (except collections).
530        - Early implementation of MUC.
531    * Breaking changes:
532        - Rename presence enums to make them easier to use.
533    * Improvements:
534        - Make hashes comparable and hashable.
535        - Make data forms embeddable easily into minidom
536          Element::builder.
537
538Version 0.4.0:
5392017-05-28  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
540    * Incompatible changes:
541        - Receipts now make the id optional, as per the specification.
542        - Hashes now expose their raw binary value, instead of staying
543          base64-encoded.
544        - Parse dates (XEP-0082) in delayed delivery (XEP-0203) and
545          last user interaction (XEP-0319), using the chrono crate.
546    * Improvements:
547        - Removal of most of the remaining clones, the only ones left
548          are due to minidom not exposing a draining iterator over the
549          children.
550        - Finish to parse all of the attributes using get_attr!().
551        - More attribute checks.
552        - Split more parsers into one parser per element.
553        - Rely on minidom 0.4.3 to serialise more standard types
554          automatically.
555        - Implement forgotten serialisation for data forms (XEP-0004).
556        - Implement legacy capabilities (XEP-0115) for compatibility
557          with older software.
558
559Version 0.3.0:
5602017-05-23  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
561    * Big changes:
562        - All parsers and serialisers now consume their argument, this
563          makes the API way more efficient, but you will have to clone
564          before passing your structs in it if you want to keep them.
565        - Payloads of stanzas are not parsed automatically anymore, to
566          let applications which want to forward them as-is do so more
567          easily.  Parsing now always succeeds on unknown payloads, it
568          just puts them into an Unknown value containing the existing
569          minidom Element.
570    * New parsers/serialisers:
571        - Last User Interaction in Presence, XEP-0319.
572    * Improved parsers/serialisers:
573        - Message now supports subject, bodies and threads as per
574          RFC 6121 §5.2.
575        - Replace most attribute reads with a nice macro.
576        - Use enums for more enum-like things, for example Algo in
577          Hash, or FieldType in DataForm.
578        - Wire up stanza-id and origin-id to MessagePayload.
579        - Wire up MAM elements to message and iq payloads.
580        - Changes in the RSM API.
581        - Add support for more data forms elements, but still not the
582          complete set.
583        - Thanks to minidom 0.3.1, check for explicitly disallowed
584          extra attributes in some elements.
585    * Crate updates:
586        - minidom 0.4.1
587
588Version 0.2.0:
5892017-05-06  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
590    * New parsers/serialisers:
591        - Stanza error, as per RFC 6120 §8.3.
592        - Jingle SOCKS5 Transport, XEP-0260.
593    * Incompatible changes:
594        - Parsers and serialisers now all implement TryFrom<Element>
595          and Into<Element>, instead of the old parse_* and serialise_*
596          functions.
597        - Presence has got an overhaul, it now hosts show, statuses and
598          priority in its struct.  The status module has also been
599          dropped.
600        - Message now supports multiple bodies, each in a different
601          language.  The body module has also been dropped.
602        - Iq now gets a proper StanzaError when the type is error.
603        - Fix bogus Jingle payload, which was requiring both
604          description and transport.
605    * Crate updates:
606        - minidom 0.3.0
607
608Version 0.1.0:
6092017-04-29  Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
610    * Implement many extensions.