Skip to content
This repository was archived by the owner on May 30, 2022. It is now read-only.

Commit 94a834e

Browse files
committed
Detach from parent project and rename crate to fast-xml
1 parent d872771 commit 94a834e

26 files changed

+138
-127
lines changed

Cargo.toml

+5-9
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
[package]
2-
name = "quick-xml"
2+
name = "fast-xml"
33
version = "0.23.0-alpha3"
4-
authors = ["Johann Tuffe <[email protected]>"]
54
description = "High performance xml reader and writer"
65
edition = "2018"
76

8-
documentation = "https://docs.rs/quick-xml"
9-
repository = "https://github.com/tafia/quick-xml"
7+
documentation = "https://docs.rs/fast-xml"
8+
repository = "https://github.com/Mingun/fast-xml"
109

11-
keywords = ["xml", "reader", "parser", "writer", "html"]
12-
categories = ["encoding", "parsing", "text-processing"]
10+
keywords = ["xml", "serde", "parser", "writer", "html"]
11+
categories = ["encoding", "parsing", "parser-implementations"]
1312
license = "MIT"
1413

15-
[badges]
16-
travis-ci = { repository = "tafia/quick-xml" }
17-
1814
[dependencies]
1915
encoding_rs = { version = "0.8.26", optional = true }
2016
serde = { version = "1.0", optional = true }

README.md

+32-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# quick-xml
1+
# fast-xml -- successor of [quick-xml]
22

3-
![status](https://github.com/tafia/quick-xml/actions/workflows/rust.yml/badge.svg)
4-
[![Crate](https://img.shields.io/crates/v/quick-xml.svg)](https://crates.io/crates/quick-xml)
3+
![status](https://github.com/Mingun/fast-xml/actions/workflows/rust.yml/badge.svg)
4+
[![Crate](https://img.shields.io/crates/v/fast-xml.svg)](https://crates.io/crates/fast-xml)
55

66
High performance xml pull reader/writer.
77

@@ -10,17 +10,27 @@ The reader:
1010
- is easy on memory allocation (the API provides a way to reuse buffers)
1111
- support various encoding (with `encoding` feature), namespaces resolution, special characters.
1212

13-
[docs.rs](https://docs.rs/quick-xml)
13+
[docs.rs](https://docs.rs/fast-xml)
1414

1515
Syntax is inspired by [xml-rs](https://github.com/netvl/xml-rs).
1616

17+
## Migration from [quick-xml]
18+
19+
If you using quick-xml 0.22.0 or 0.23.0-alpha3, you can just replace `quick-xml`
20+
in your `Cargo.toml` with `fast-xml`. Replace each occurrence of `quick_xml`
21+
crate name to `fast_xml` in your code base.
22+
23+
That two releases of fast-xml was specifically made for migration and contains
24+
the same code as original quick-xml, except updated cargo metadata and extern
25+
crate names in tests, benches and examples.
26+
1727
## Example
1828

1929
### Reader
2030

2131
```rust
22-
use quick_xml::Reader;
23-
use quick_xml::events::Event;
32+
use fast_xml::Reader;
33+
use fast_xml::events::Event;
2434

2535
let xml = r#"<tag1 att1 = "test">
2636
<tag2><!--Test comment-->Test</tag2>
@@ -64,9 +74,9 @@ loop {
6474
### Writer
6575

6676
```rust
67-
use quick_xml::Writer;
68-
use quick_xml::Reader;
69-
use quick_xml::events::{Event, BytesEnd, BytesStart};
77+
use fast_xml::Writer;
78+
use fast_xml::Reader;
79+
use fast_xml::events::{Event, BytesEnd, BytesStart};
7080
use std::io::Cursor;
7181
use std::iter;
7282

@@ -110,20 +120,20 @@ assert_eq!(result, expected.as_bytes());
110120

111121
## Serde
112122

113-
When using the `serialize` feature, quick-xml can be used with serde's `Serialize`/`Deserialize` traits.
123+
When using the `serialize` feature, fast-xml can be used with serde's `Serialize`/`Deserialize` traits.
114124

115125
Here is an example deserializing crates.io source:
116126

117127
```rust
118128
// Cargo.toml
119129
// [dependencies]
120130
// serde = { version = "1.0", features = [ "derive" ] }
121-
// quick-xml = { version = "0.21", features = [ "serialize" ] }
131+
// fast-xml = { version = "0.22", features = [ "serialize" ] }
122132
extern crate serde;
123-
extern crate quick_xml;
133+
extern crate fast_xml;
124134

125135
use serde::Deserialize;
126-
use quick_xml::de::{from_str, DeError};
136+
use fast_xml::de::{from_str, DeError};
127137

128138
#[derive(Debug, Deserialize, PartialEq)]
129139
struct Link {
@@ -213,10 +223,12 @@ fn crates_io() -> Result<Html, DeError> {
213223

214224
### Credits
215225

216-
This has largely been inspired by [serde-xml-rs](https://github.com/RReverser/serde-xml-rs).
217-
quick-xml follows its convention for deserialization, including the
226+
This has largely been inspired by [serde-xml-rs](https://github.com/RReverser/serde-xml-rs).
227+
fast-xml follows its convention for deserialization, including the
218228
[`$value`](https://github.com/RReverser/serde-xml-rs#parsing-the-value-of-a-tag) special name.
219229

230+
Original [quick-xml] was developed by @tafia and abandoned around end of 2021.
231+
220232
### Parsing the "value" of a tag
221233

222234
If you have an input of the form `<foo abc="xyz">bar</foo>`, and you want to get at the `bar`, you can use the special name `$value`:
@@ -262,7 +274,7 @@ Serializing `Root { foo: Foo::Bar }` will then yield `<Root foo="Bar"/>` instead
262274

263275
### Performance
264276

265-
Note that despite not focusing on performance (there are several unecessary copies), it remains about 10x faster than serde-xml-rs.
277+
Note that despite not focusing on performance (there are several unnecessary copies), it remains about 10x faster than serde-xml-rs.
266278

267279
# Features
268280

@@ -273,7 +285,8 @@ Note that despite not focusing on performance (there are several unecessary copi
273285

274286
Benchmarking is hard and the results depend on your input file and your machine.
275287

276-
Here on my particular file, quick-xml is around **50 times faster** than [xml-rs](https://crates.io/crates/xml-rs) crate.
288+
Here on my particular file, fast-xml is around **50 times faster** than [xml-rs](https://crates.io/crates/xml-rs) crate.
289+
_(measurements was done while this crate named quick-xml)_
277290

278291
```
279292
// quick-xml benches
@@ -298,3 +311,5 @@ Any PR is welcomed!
298311
## License
299312

300313
MIT
314+
315+
[quick-xml]: https://github.com/tafia/quick-xml

benches/bench.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#![feature(test)]
22

3-
extern crate quick_xml;
3+
extern crate fast_xml;
44
extern crate test;
55

6-
use quick_xml::events::Event;
7-
use quick_xml::Reader;
6+
use fast_xml::events::Event;
7+
use fast_xml::Reader;
88
use test::Bencher;
99

1010
#[bench]
11-
fn bench_quick_xml_normal(b: &mut Bencher) {
11+
fn bench_fast_xml_normal(b: &mut Bencher) {
1212
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
1313
b.iter(|| {
1414
let mut r = Reader::from_reader(src);
@@ -28,7 +28,7 @@ fn bench_quick_xml_normal(b: &mut Bencher) {
2828
}
2929

3030
#[bench]
31-
fn bench_quick_xml_namespaced(b: &mut Bencher) {
31+
fn bench_fast_xml_namespaced(b: &mut Bencher) {
3232
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
3333
b.iter(|| {
3434
let mut r = Reader::from_reader(src);
@@ -49,7 +49,7 @@ fn bench_quick_xml_namespaced(b: &mut Bencher) {
4949
}
5050

5151
#[bench]
52-
fn bench_quick_xml_escaped(b: &mut Bencher) {
52+
fn bench_fast_xml_escaped(b: &mut Bencher) {
5353
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
5454
b.iter(|| {
5555
let mut buf = Vec::new();
@@ -78,7 +78,7 @@ fn bench_quick_xml_escaped(b: &mut Bencher) {
7878
}
7979

8080
#[bench]
81-
fn bench_quick_xml_normal_trimmed(b: &mut Bencher) {
81+
fn bench_fast_xml_normal_trimmed(b: &mut Bencher) {
8282
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
8383
b.iter(|| {
8484
let mut r = Reader::from_reader(src);
@@ -100,7 +100,7 @@ fn bench_quick_xml_normal_trimmed(b: &mut Bencher) {
100100
}
101101

102102
#[bench]
103-
fn bench_quick_xml_namespaced_trimmed(b: &mut Bencher) {
103+
fn bench_fast_xml_namespaced_trimmed(b: &mut Bencher) {
104104
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
105105
b.iter(|| {
106106
let mut r = Reader::from_reader(src);
@@ -123,7 +123,7 @@ fn bench_quick_xml_namespaced_trimmed(b: &mut Bencher) {
123123
}
124124

125125
#[bench]
126-
fn bench_quick_xml_escaped_trimmed(b: &mut Bencher) {
126+
fn bench_fast_xml_escaped_trimmed(b: &mut Bencher) {
127127
let src: &[u8] = include_bytes!("../tests/sample_rss.xml");
128128
b.iter(|| {
129129
let mut buf = Vec::new();
@@ -154,7 +154,7 @@ fn bench_quick_xml_escaped_trimmed(b: &mut Bencher) {
154154
}
155155

156156
#[bench]
157-
fn bench_quick_xml_one_text_event(b: &mut Bencher) {
157+
fn bench_fast_xml_one_text_event(b: &mut Bencher) {
158158
let src = "Hello world!".repeat(512 / 12).into_bytes();
159159
let mut buf = Vec::with_capacity(1024);
160160
b.iter(|| {
@@ -173,7 +173,7 @@ fn bench_quick_xml_one_text_event(b: &mut Bencher) {
173173
}
174174

175175
#[bench]
176-
fn bench_quick_xml_one_start_event_trimmed(b: &mut Bencher) {
176+
fn bench_fast_xml_one_start_event_trimmed(b: &mut Bencher) {
177177
let src = format!(r#"<hello target="{}">"#, "world".repeat(512 / 5)).into_bytes();
178178
let mut buf = Vec::with_capacity(1024);
179179
b.iter(|| {
@@ -194,7 +194,7 @@ fn bench_quick_xml_one_start_event_trimmed(b: &mut Bencher) {
194194
}
195195

196196
#[bench]
197-
fn bench_quick_xml_one_comment_event_trimmed(b: &mut Bencher) {
197+
fn bench_fast_xml_one_comment_event_trimmed(b: &mut Bencher) {
198198
let src = format!(r#"<!-- hello "{}" -->"#, "world".repeat(512 / 5)).into_bytes();
199199
let mut buf = Vec::with_capacity(1024);
200200
b.iter(|| {
@@ -215,7 +215,7 @@ fn bench_quick_xml_one_comment_event_trimmed(b: &mut Bencher) {
215215
}
216216

217217
#[bench]
218-
fn bench_quick_xml_one_cdata_event_trimmed(b: &mut Bencher) {
218+
fn bench_fast_xml_one_cdata_event_trimmed(b: &mut Bencher) {
219219
let src = format!(r#"<![CDATA[hello "{}"]]>"#, "world".repeat(512 / 5)).into_bytes();
220220
let mut buf = Vec::with_capacity(1024);
221221
b.iter(|| {

compare/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2018"
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dev-dependencies]
10-
quick-xml = { path = "..", features = ["serialize"] }
10+
fast-xml = { path = "..", features = ["serialize"] }
1111
xml-rs = "0.8.0"
1212
serde-xml-rs = "0.4.1"
1313
serde = { version = "1.0.103", features = [ "derive" ] }

compare/benches/bench-serde.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#![feature(test)]
22

3-
extern crate quick_xml;
3+
extern crate fast_xml;
44
extern crate serde;
55
extern crate serde_xml_rs;
66
extern crate test;
@@ -40,9 +40,9 @@ struct Enclosure {
4040
}
4141

4242
#[bench]
43-
fn bench_serde_quick_xml(b: &mut Bencher) {
43+
fn bench_serde_fast_xml(b: &mut Bencher) {
4444
b.iter(|| {
45-
let rss: Rss = quick_xml::de::from_str(SOURCE).unwrap();
45+
let rss: Rss = fast_xml::de::from_str(SOURCE).unwrap();
4646
assert_eq!(rss.channel.items.len(), 99);
4747
});
4848
}

compare/benches/bench.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#![feature(test)]
22

3-
extern crate quick_xml;
3+
extern crate fast_xml;
44
extern crate test;
55
extern crate xml;
66

7-
use quick_xml::{events::Event, Reader};
7+
use fast_xml::{events::Event, Reader};
88
use test::Bencher;
99
use xml::reader::{EventReader, XmlEvent};
1010

1111
#[bench]
12-
fn bench_quick_xml(b: &mut Bencher) {
12+
fn bench_fast_xml(b: &mut Bencher) {
1313
let src: &[u8] = include_bytes!("../../tests/sample_rss.xml");
1414
b.iter(|| {
1515
let mut r = Reader::from_reader(src);

examples/custom_entities.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
//! * the regex in this example is simple but brittle;
88
//! * it does not support the use of entities in entity declaration.
99
10-
extern crate quick_xml;
10+
extern crate fast_xml;
1111
extern crate regex;
1212

13-
use quick_xml::events::Event;
14-
use quick_xml::Reader;
13+
use fast_xml::events::Event;
14+
use fast_xml::Reader;
1515
use regex::bytes::Regex;
1616
use std::collections::HashMap;
1717

examples/issue68.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#![allow(unused)]
22

3-
extern crate quick_xml;
3+
extern crate fast_xml;
44

5-
use quick_xml::events::Event;
6-
use quick_xml::Reader;
5+
use fast_xml::events::Event;
6+
use fast_xml::Reader;
77
use std::io::Read;
88

99
struct Resource {

examples/nested_readers.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
extern crate quick_xml;
2-
use quick_xml::events::Event;
3-
use quick_xml::Reader;
1+
extern crate fast_xml;
2+
use fast_xml::events::Event;
3+
use fast_xml::Reader;
44
// a structure to capture the rows we've extracted
55
// from a ECMA-376 table in document.xml
66
#[derive(Debug, Clone)]
@@ -11,7 +11,7 @@ struct TableStat {
1111
// demonstrate how to nest readers
1212
// This is useful for when you need to traverse
1313
// a few levels of a document to extract things.
14-
fn main() -> Result<(), quick_xml::Error> {
14+
fn main() -> Result<(), fast_xml::Error> {
1515
let mut buf = Vec::new();
1616
// buffer for nested reader
1717
let mut skip_buf = Vec::new();

examples/read_texts.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
extern crate quick_xml;
1+
extern crate fast_xml;
22

33
fn main() {
4-
use quick_xml::events::Event;
5-
use quick_xml::Reader;
4+
use fast_xml::events::Event;
5+
use fast_xml::Reader;
66

77
let xml = "<tag1>text1</tag1><tag1>text2</tag1>\
88
<tag1>text3</tag1><tag1><tag2>text4</tag2></tag1>";

fuzz/Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

22
[package]
3-
name = "quick-xml-fuzz"
3+
name = "fast-xml-fuzz"
44
version = "0.0.1"
55
authors = ["Automatically generated"]
66
publish = false
77

88
[package.metadata]
99
cargo-fuzz = true
1010

11-
[dependencies.quick-xml]
11+
[dependencies.fast-xml]
1212
path = ".."
1313
[dependencies.libfuzzer-sys]
1414
git = "https://github.com/rust-fuzz/libfuzzer-sys.git"

fuzz/fuzz_targets/fuzz_target_1.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#![no_main]
22
#[macro_use] extern crate libfuzzer_sys;
3-
extern crate quick_xml;
3+
extern crate fast_xml;
44

5-
use quick_xml::Reader;
6-
use quick_xml::events::Event;
5+
use fast_xml::Reader;
6+
use fast_xml::events::Event;
77
use std::io::Cursor;
88

99
fuzz_target!(|data: &[u8]| {
@@ -24,7 +24,7 @@ fuzz_target!(|data: &[u8]| {
2424
}
2525
}
2626
Ok(Event::Text(ref e)) | Ok(Event::Comment(ref e))
27-
| Ok(Event::CData(ref e)) | Ok(Event::PI(ref e))
27+
| Ok(Event::CData(ref e)) | Ok(Event::PI(ref e))
2828
| Ok(Event::DocType(ref e)) => {
2929
if e.unescaped().is_err() {
3030
break;

0 commit comments

Comments
 (0)