Skip to content

Releases: tafia/quick-xml

v0.37.1 - Write CDATA safely

17 Nov 20:41
Compare
Choose a tag to compare

What's Changed

New Features

  • #831: Add BytesCData::escaped() fn to construct CDATA events from arbitrary user input.

New Contributors

Full Changelog: v0.37.0...v0.37.1

v0.37.0 - serde & errors imporvements

27 Oct 22:04
Compare
Choose a tag to compare

What's Changed

⚠️ Significant Changes

Those changes could require not trivial adoption of your code:

  • The recognized boolean values in serde Deserializer are reduced. Use #[serde(deserialize_with)] which will accept and parse strings if you need the old behavior.
  • Serializer no longer serialize consequent primitive values (those which would produce only text, without surrounding tags), because it is impossible to deserialize them back to the same value.
  • The crate's errors was changed, some variants was splitted to their own error types, some removed.

New Features

  • #826: Implement From<String> and From<Cow<str>> for quick_xml::de::Text.
  • #826: Make SimpleTypeDeserializer and SimpleTypeSerializer public.
  • #826: Implement IntoDeserializer for &mut Deserializer.

Bug Fixes

  • #655: Do not write indent before and after $text fields and those $value fields that are serialized as a text (for example, usize or String).
  • #826: Handle only those boolean representations that are allowed by Xml Schema which is only "true", "1", "false", and "0". Previously the following values also was accepted:
    bool XML content
    true "True", "TRUE", "t", "Yes", "YES", "yes", "y"
    false "False", "FALSE", "f", "No", "NO", "no", "n"

Misc Changes

  • #227: Split SeError from DeError in the serialize feature. Serialize functions and methods now return SeError.
  • #810: Return std::io::Error from Writer methods.
  • #811: Split NamespaceError and EncodingError from Error.
  • #811: Renamed Error::EscapeError to Error::Escape to match other variants.
  • #811: Narrow down error return type from Error where only one variant is ever returned: attribute related methods on BytesStart and BytesDecl returns AttrError.
  • #820: Classify output of the Serializer by returning an enumeration with kind of written data.
  • #823: Do not allow serialization of consequent primitives, for example Vec<usize> or Vec<String> in $value fields. They cannot be deserialized back with the same result.
  • #827: Make escape and it variants take a impl Into<Cow<str>> argument and implement From<(&'a str, Cow<'a, str>)> on Attribute.
  • #826: Removed DeError::InvalidInt, DeError::InvalidFloat and DeError::InvalidBoolean. Now the responsibility for returning the error lies with the visitor of the type. See rationale in serde-rs/serde#2811

New Contributors

Full Changelog: v0.36.2...v0.37.0

v0.36.2 - Fix DOCTYPE parsing

20 Sep 17:40
Compare
Choose a tag to compare

What's Changed

Bug Fixes

  • #533: Fix incorrect DocType closing bracket detection when parsing with buffered reader

Full Changelog: v0.36.1...v0.36.2

v0.36.1 - Read binary from XML

23 Jul 15:37
Compare
Choose a tag to compare

What's Changed

New Features

  • #623: Added Reader::stream() that can be used to read arbitrary data from the inner reader while track position for XML reader.

Full Changelog: v0.36.0...v0.36.1

v0.36.0 - Compatibility with Adobe Flash

08 Jul 16:41
Compare
Choose a tag to compare

What's Changed

Bug Fixes

  • #781: Fix conditions to start CDATA section. Only uppercase <![CDATA[ can start it.
    Previously any case was allowed.
  • #780: Fixed incorrect .error_position() when encountering syntax error for open or self-closed tag.

Misc Changes

  • #780: reader::Parser, reader::ElementParser and reader::PiParser moved to the new module parser.
  • #776: Allow to have attributes in the end tag for compatibility reasons with Adobe Flash XML parser.

Full Changelog: v0.35.0...v0.36.0

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