Skip to content

Releases: tafia/quick-xml

v0.35.0 - a couple of bugfixes

29 Jun 16:42
Compare
Choose a tag to compare

What's Changed

New Features

  • #772: Add reader::Config::allow_unmatched_ends to permit dangling end tags.

Bug Fixes

  • #773: Fixed reporting incorrect end position in Reader::read_to_end family of methods and trimming of the trailing spaces in Reader::read_text when trim_text_start is set and the last event is not a Text event.
  • #771: Character references now allow any number of leading zeroes as it should. As a result, the following variants of quick_xml::escape::EscapeError are removed:
    • TooLongDecimal
    • TooLongHexadecimal
  • #771: Fixed Attribute::unescape_value which does not unescape predefined values since 0.32.0.
  • #774: Fixed regression since 0.33.0: Text event may be skipped in read_event_into() and read_event_into_async() in some circumstances.

Misc Changes

  • #771: EscapeError::UnrecognizedSymbol renamed to EscapeError::UnrecognizedEntity.
  • #771: Implemented PartialEq for EscapeError.
  • #771: Replace the following variants of EscapeError by InvalidCharRef variant with a new ParseCharRefError inside:
    • EntityWithNull
    • InvalidDecimal
    • InvalidHexadecimal
    • InvalidCodepoint

New Contributors

Full Changelog: v0.34.0...v0.35.0

v0.34.0 - allow to read 4GB+ files on 32-bit targets

24 Jun 20:18
Compare
Choose a tag to compare

What's Changed

Bug Fixes

  • #751: Fix internal overflow when read 4GB+ files on 32-bit targets using Reader<impl BufRead> readers.

Misc Changes

  • #760: Attribute::decode_and_unescape_value and Attribute::decode_and_unescape_value_with now accepts Decoder instead of Reader. Use Reader::decoder() to get it.
  • #760: Writer::write_event now consumes event. Use Event::borrow() if you want to keep ownership.
  • #751: Type of Reader::error_position() and Reader::buffer_position() changed from usize to u64.
  • #751: Type alias Span changed from Range<usize> to Range<u64>.

Full Changelog: v0.33.0...v0.34.0

v0.33.0 - Make compile time small again

21 Jun 15:59
Compare
Choose a tag to compare

What's Changed

New Features

  • #758: Implemented From<QName> for BytesStart and BytesEnd.

Bug Fixes

  • #755: Fix incorrect missing of trimming all-space text events when
    trim_text_start = false and trim_text_end = true.

Misc Changes

  • #650: Change the type of Event::PI to a new dedicated BytesPI type.
  • #759: Make const as much functions as possible:
    • resolve_html5_entity()
    • resolve_predefined_entity()
    • resolve_xml_entity()
    • Attr::key()
    • Attr::value()
    • Attributes::html()
    • Attributes::new()
    • BytesDecl::from_start()
    • Decoder::encoding()
    • Deserializer::get_ref()
    • IoReader::get_ref()
    • LocalName::into_inner()
    • Namespace::into_inner()
    • NsReader::config()
    • NsReader::prefixes()
    • Prefix::into_inner()
    • QName::into_inner()
    • Reader::buffer_position()
    • Reader::config()
    • Reader::decoder()
    • Reader::error_position()
    • Reader::get_ref()
    • SliceReader::get_ref()
    • Writer::get_ref()
    • Writer::new()
  • #763: Hide quick_xml::escape::resolve_html5_entity under escape-html feature again.
    This function has significant influence to the compilation time (10+ seconds or 5x times)

Full Changelog: v0.32.0...v0.33.0

v0.32.0

10 Jun 14:05
Compare
Choose a tag to compare

Significant Changes

The method of reporting positions of errors has changed - use error_position() to get an offset of the error position. For SyntaxErrors the range error_position()..buffer_position() also will represent a span of error.

⚠️ Breaking Changes

The way to configure parser has changed. Now all configuration is contained in the Config struct and can be applied at once. When serde-types feature is enabled, configuration is serializable.

The way of resolve entities with unescape_with has changed. Those methods no longer resolve predefined entities (lt, gt, apos, quot, amp). NoEntityResolver renamed to PredefinedEntityResolver.

Writer::create_element now accepts impl Into<Cow<str>> instead of &impl AsRef<str>.

Minimum supported version of serde raised to 1.0.139

The full changelog is below.

What's Changed

New Features

  • #513: Allow to continue parsing after getting new Error::IllFormed.
  • #677: Added methods config() and config_mut() to inspect and change the parser configuration. Previous builder methods on Reader / NsReader was replaced by direct access to fields of config using reader.config_mut().<...>.
  • #684: Added a method Config::enable_all_checks to turn on or off all well-formedness checks.
  • #362: Added escape::minimal_escape() which escapes only & and <.
  • #362: Added BytesCData::minimal_escape() which escapes only & and <.
  • #362: Added Serializer::set_quote_level() which allow to set desired level of escaping.
  • #705: Added NsReader::prefixes() to list all the prefixes currently declared.
  • #629: Added a default case to impl_deserialize_for_internally_tagged_enum macro so that it can handle every attribute that does not match existing cases within an enum variant.
  • #722: Allow to pass owned strings to Writer::create_element. This is breaking change!
  • #275: Added ElementWriter::new_line() which enables pretty printing elements with multiple attributes.
  • #743: Added Deserializer::get_ref() to get XML Reader from serde Deserializer
  • #734: Added helper functions to resolve predefined XML and HTML5 entities:
    • quick_xml::escape::resolve_predefined_entity
    • quick_xml::escape::resolve_xml_entity
    • quick_xml::escape::resolve_html5_entity
  • #753: Added parser for processing instructions: quick_xml::reader::PiParser.
  • #754: Added parser for elements: quick_xml::reader::ElementParser.

Bug Fixes

  • #622: Fix wrong disregarding of not closed markup, such as lone <.
  • #684: Fix incorrect position reported for Error::IllFormed(DoubleHyphenInComment).
  • #684: Fix incorrect position reported for Error::IllFormed(MissingDoctypeName).
  • #704: Fix empty tags with attributes not being expanded when expand_empty_elements is set to true.
  • #683: Use local tag name when check tag name against possible names for field.
  • #753: Correctly determine end of processing instructions and XML declaration.

Misc Changes

  • #675: Minimum supported version of serde raised to 1.0.139
  • #675: Rework the quick_xml::Error type to provide more accurate information:
    • Error::EndEventMismatch replaced by IllFormedError::MismatchedEndTag in some cases
    • Error::EndEventMismatch replaced by IllFormedError::UnmatchedEndTag in some cases
    • Error::TextNotFound was removed because not used
    • Error::UnexpectedBang replaced by SyntaxError
    • Error::UnexpectedEof replaced by SyntaxError in some cases
    • Error::UnexpectedEof replaced by IllFormedError in some cases
    • Error::UnexpectedToken replaced by IllFormedError::DoubleHyphenInComment
    • Error::XmlDeclWithoutVersion replaced by IllFormedError::MissingDeclVersion (in #684)
    • Error::EmptyDocType replaced by IllFormedError::MissingDoctypeName (in #684)
  • #684: Changed positions reported for SyntaxErrors: now they are always points to the start of markup (i. e. to the < character) with error. Use error_position() for that.
  • #684: Now <??> parsed as Event::PI with empty content instead of raising syntax error.
  • #684: Now <?xml?> parsed as Event::Decl instead of Event::PI.
  • #362: Now default quote level is QuoteLevel::Partial when using serde serializer.
  • #689: buffer_position() now always report the position the parser last seen. To get an error position use error_position().
  • #738: Add an example of how to deserialize XML elements into Rust enums using an intermediate custom deserializer.
  • #748: Implement Clone for DeEvent, PayloadEvent and Text.
  • #734: Rename NoEntityResolver to PredefinedEntityResolver.
  • #734: No longer resolve predefined entities (lt, gt, apos, quot, amp) in unescape_with family of methods. You should do that by yourself using the one of the following methods:
    • quick_xml::escape::resolve_predefined_entity
    • quick_xml::escape::resolve_xml_entity
    • quick_xml::escape::resolve_html5_entity

New Contributors

Full Changelog: v0.31.0...v0.32.0

Support serve >=1.0.181, various serde fixes and async writer

22 Oct 07:04
Compare
Choose a tag to compare

What's Changed

MSRV bumped to 1.56! Crate now uses Rust 2021 edition.

⚠️ BREAKING CHANGE! Serde's enum representation was changed (it was buggy anyway) to ensure compatibility with serde >= 1.0.181.

New Features

  • #545: Resolve well-known namespaces (xml and xmlns) to their appropriate URIs. Also, enforce namespace constraints related to these well-known namespaces.
  • #635: Add support for async ElementWriter operations.

Bug Fixes

  • #660: Fixed incorrect deserialization of xs:lists from empty tags (<tag/> or <tag></tag>). Previously an DeError::UnexpectedEof") was returned in that case.
  • #580: Fixed incorrect deserialization of vectors of newtypes from sequences of tags.
  • #661: More string handling of serialized primitive values (booleans, numbers, strings, unit structs, unit variants). <int>123<something-else/></int> is no longer valid content. Previously all data after 123 up to closing tag would be silently skipped.
  • #567: Fixed incorrect deserialization of vectors of enums from sequences of tags.
  • #671: Fixed deserialization of empty simpleTypes (for example, attributes) into Option fields: now they are always deserialized as Some("").

Misc Changes

  • #643: Bumped MSRV to 1.56. In practice the previous MSRV was incorrect in many cases.
  • #643: Adopted Rust 2021 edition.
  • #545: Added new Error variant -- Error::InvalidPrefixBind.
  • #651: Relax requirement for version of arbitrary dependency -- we're actually compatible with version 1.0.0 and up.
  • #649: Make features linkable and reference them in the docs.
  • #619: Allow to raise application errors in ElementWriter::write_inner_content (and newly added ElementWriter::write_inner_content_async of course).
  • #662: Get rid of some allocations during serde deserialization.
  • #665: Improve serialization of xs:lists when some elements serialized to an empty string.
  • #630: Fixed compatibility with serde >= 1.0.181

New Contributors

Full Changelog: v0.30.0...v0.31.0

Serde support improvements and bugfix

23 Jul 19:41
Compare
Choose a tag to compare

What's Changed

New Features

Bug Fixes

  • #604: Avoid crashing on wrong comments like <!--> when using read_event_into* functions.

Misc Changes

New Contributors

Full Changelog: v0.29.0...v0.30.0

Serde helpers and indentation for async writer

12 Jun 19:48
Compare
Choose a tag to compare

What's Changed

New Features

  • #601: Add serde_helper module to the crate root with some useful utility
    functions and document using of enum's unit variants as a text content of element.
  • #606: Implement indentation for AsyncWrite trait implementations.

Bug Fixes

  • #603: Fix a regression from #581 that an XML comment or a processing
    instruction between a <!DOCTYPE> and the root element in the file brokes
    deserialization of structs by returning DeError::ExpectedStart
  • #608: Return a new error Error::EmptyDocType on empty doctype instead
    of crashing because of a debug assertion.

Misc Changes

  • #594: Add a helper macro to help deserialize internally tagged enums
    with Serde, which doesn't work out-of-box due to serde limitations.

New Contributors

Full Changelog: v0.28.2...v0.29.0

EntityResolver for deserializer and export EscapeError

12 Apr 15:28
Compare
Choose a tag to compare

What's Changed

New Features

  • #581: Allow Deserializer to set quick_xml::de::EntityResolver for resolving unknown entities that would otherwise cause the parser to return an [EscapeError::UnrecognizedSymbol] error.

Misc Changes

  • #584: Export EscapeError from the crate
  • #581: Relax requirements for unsescape_* set of functions -- their now use FnMut instead of Fn for resolve_entity parameters, like Iterator::map from std.

New Contributors

Full Changelog: v0.28.1...v0.28.2

Relax requirements in `ElementWriter.write_inner_content`

19 Mar 14:07
Compare
Choose a tag to compare

What's Changed

Misc Changes

  • #579: ElementWriter.write_inner_content now uses a FnOnce instead of a more restrictive Fn closure

New Contributors

  • @Tpt made their first contribution in #579

Full Changelog: v0.28.0...v0.28.1

Improvements in serde and async

13 Mar 15:13
Compare
Choose a tag to compare

What's Changed

New Features

  • #541: (De)serialize specially named $text enum variant in externally tagged
    enums to / from textual content
  • #556: to_writer and to_string now accept ?Sized types
  • #556: Add new to_writer_with_root and to_string_with_root helper functions
  • #520: Add methods BytesText::inplace_trim_start and BytesText::inplace_trim_end
    to trim leading and trailing spaces from text events
  • #565: Allow deserialize special field names $value and $text into borrowed
    fields when use serde deserializer
  • #568: Rename Writter::inner into Writter::get_mut
  • #568: Add method Writter::get_ref
  • #569: Rewrite the Reader::read_event_into_async as an async fn, making the future Send if possible.
  • #571: Borrow element names (<element>) when deserialize with serde.
    This change allow to deserialize into HashMap<&str, T>, for example
  • #573: Add basic support for async byte writers via tokio's AsyncWrite.

Bug Fixes

  • #537: Restore ability to deserialize attributes that represents XML namespace
    mappings (xmlns:xxx) that was broken since #490
  • #510: Fix an error of deserialization of Option<T> fields where T is some
    sequence type (for example, Vec or tuple)
  • #540: Fix a compilation error (probably a rustc bug) in some circumstances.
    Serializer::new and Serializer::with_root now accepts only references to Writer.
  • #520: Merge consequent (delimited only by comments and processing instructions)
    texts and CDATA when deserialize using serde deserializer. DeEvent::Text and
    DeEvent::CData events was replaced by DeEvent::Text with merged content.
    The same behavior for the Reader does not implemented (yet?) and should be
    implemented manually
  • #562: Correctly set minimum required version of memchr dependency to 2.1
  • #565: Correctly set minimum required version of tokio dependency to 1.10
  • #565: Fix compilation error when build with serde <1.0.139

New Contributors

Full Changelog: v0.27.1...v0.28.0