rxml-0.13.3/.cargo_vcs_info.json0000644000000001420000000000100120770ustar { "git": { "sha1": "1b760bb07a385b3cb4a88eddc782204670a5d820" }, "path_in_vcs": "rxml" }rxml-0.13.3/COPYING000064400000000000000000000020431046102023000117240ustar 00000000000000Copyright (c) 2021 Jonas Schäfer Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. rxml-0.13.3/Cargo.lock0000644000000535540000000000100100710ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "addr2line" version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "anes" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] name = "async-stream" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", "pin-project-lite", ] [[package]] name = "async-stream-impl" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "autocfg" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", ] [[package]] name = "bumpalo" version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytes" version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cast" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "castaway" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" dependencies = [ "rustversion", ] [[package]] name = "cc" version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292" [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "ciborium" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" dependencies = [ "ciborium-io", "ciborium-ll", "serde", ] [[package]] name = "ciborium-io" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" [[package]] name = "ciborium-ll" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" dependencies = [ "ciborium-io", "half", ] [[package]] name = "clap" version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11d8838454fda655dafd3accb2b6e2bea645b9e4078abe84a22ceb947235c5cc" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" version = "4.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" dependencies = [ "anstyle", "clap_lex", ] [[package]] name = "clap_lex" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "compact_str" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f" dependencies = [ "castaway", "cfg-if", "itoa", "ryu", "static_assertions", ] [[package]] name = "criterion" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" dependencies = [ "anes", "cast", "ciborium", "clap", "criterion-plot", "is-terminal", "itertools", "num-traits", "once_cell", "oorandom", "plotters", "rayon", "regex", "serde", "serde_derive", "serde_json", "tinytemplate", "walkdir", ] [[package]] name = "criterion-plot" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", "itertools", ] [[package]] name = "crossbeam-deque" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "futures-core" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "gimli" version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "half" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ "cfg-if", "crunchy", ] [[package]] name = "hermit-abi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "is-terminal" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ "hermit-abi", "libc", "windows-sys 0.52.0", ] [[package]] name = "itertools" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] [[package]] name = "libc" version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi", "libc", "wasi", "windows-sys 0.52.0", ] [[package]] name = "num-traits" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "object" version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "pin-project-lite" version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "plotters" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a15b6eccb8484002195a3e44fe65a4ce8e93a625797a063735536fd59cb01cf3" dependencies = [ "num-traits", "plotters-backend", "plotters-svg", "wasm-bindgen", "web-sys", ] [[package]] name = "plotters-backend" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "414cec62c6634ae900ea1c56128dfe87cf63e7caece0852ec76aba307cebadb7" [[package]] name = "plotters-svg" version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81b30686a7d9c3e010b84284bdd26a29f2138574f52f5eb6f794fc0ad924e705" dependencies = [ "plotters-backend", ] [[package]] name = "proc-macro2" version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quote" version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] [[package]] name = "rayon" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "regex" version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustversion" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "rxml" version = "0.13.3" dependencies = [ "bytes", "criterion", "futures-core", "pin-project-lite", "rxml_proc", "rxml_validation", "tokio", "tokio-test", "weak-table", ] [[package]] name = "rxml_proc" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d46a2e263a1beb8b39e69bffee9f2395f479cc02472c247af00e065006970ca7" dependencies = [ "quote", "rxml_validation", "syn", ] [[package]] name = "rxml_validation" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826e80413b9a35e9d33217b3dcac04cf95f6559d15944b93887a08be5496c4a4" dependencies = [ "compact_str", ] [[package]] name = "ryu" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "serde" version = "1.0.206" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.206" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "serde_json" version = "1.0.124" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66ad62847a56b3dba58cc891acd13884b9c61138d330c0d7b6181713d4fce38d" dependencies = [ "itoa", "memchr", "ryu", "serde", ] [[package]] name = "socket2" version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "syn" version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "tinytemplate" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" dependencies = [ "serde", "serde_json", ] [[package]] name = "tokio" version = "1.39.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" dependencies = [ "backtrace", "bytes", "libc", "mio", "pin-project-lite", "socket2", "tokio-macros", "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", "syn", ] [[package]] name = "tokio-stream" version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", "tokio", ] [[package]] name = "tokio-test" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" dependencies = [ "async-stream", "bytes", "futures-core", "tokio", "tokio-stream", ] [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "walkdir" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "weak-table" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" [[package]] name = "web-sys" version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "winapi-util" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ "windows-sys 0.59.0", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets", ] [[package]] name = "windows-sys" version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_gnullvm", "windows_i686_msvc", "windows_x86_64_gnu", "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" rxml-0.13.3/Cargo.toml0000644000000046070000000000100101070ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" name = "rxml" version = "0.13.3" authors = ["Jonas Schäfer "] build = false exclude = [ "/fuzz", "/util", "/target", ] autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "Minimalistic, restricted XML 1.0 parser which does not include dangerous XML features." readme = "README.md" keywords = ["xml"] categories = ["parsing"] license = "MIT" repository = "https://codeberg.org/jssfr/rxml" [package.metadata.docs.rs] all-features = true rustdoc-args = [ "--cfg", "docsrs", ] [features] compact_str = ["rxml_validation/compact_str"] default = [ "std", "tokio", "compact_str", ] macros = ["rxml_proc"] shared_ns = [ "weak-table", "std", ] std = ["futures-core/std"] stream = [ "tokio", "futures-core", ] sync = [] tokio = [ "dep:tokio", "dep:pin-project-lite", "std", ] [lib] name = "rxml" path = "src/lib.rs" [[example]] name = "pipe" path = "examples/pipe.rs" required-features = ["std"] [[bench]] name = "escaping" path = "benches/escaping.rs" harness = false [[bench]] name = "parse" path = "benches/parse.rs" harness = false [[bench]] name = "q" path = "benches/q.rs" harness = false [dependencies.bytes] version = "^1" [dependencies.futures-core] version = "^0.3" features = ["alloc"] optional = true default-features = false [dependencies.pin-project-lite] version = "^0.2" optional = true [dependencies.rxml_proc] version = "^0.12.1" optional = true [dependencies.rxml_validation] version = "^0.11.0" [dependencies.tokio] version = "^1" optional = true default-features = false [dependencies.weak-table] version = "^0.3" optional = true [dev-dependencies.criterion] version = "^0.5" features = ["html_reports"] [dev-dependencies.tokio] version = "^1" features = [ "rt", "macros", "io-util", "net", ] default-features = false [dev-dependencies.tokio-test] version = "^0.4" rxml-0.13.3/Cargo.toml.orig000064400000000000000000000032641046102023000135660ustar 00000000000000[package] name = "rxml" version = "0.13.3" authors = ["Jonas Schäfer "] license = "MIT" edition = "2021" description = "Minimalistic, restricted XML 1.0 parser which does not include dangerous XML features." readme = true repository = "https://codeberg.org/jssfr/rxml" keywords = ["xml"] categories = ["parsing"] exclude = ["/fuzz", "/util", "/target"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] weak-table = { version = "^0.3", optional = true } rxml_validation = { version = "^0.11.0" } tokio = { version = "^1", default-features = false, optional = true } bytes = { version = "^1" } rxml_proc = { version = "^0.12.1", optional = true } pin-project-lite = { version = "^0.2", optional = true } futures-core = { version = "^0.3", optional = true, default-features = false, features = ["alloc"] } [features] std = ["futures-core/std"] sync = [] shared_ns = ["weak-table", "std"] default = ["std", "tokio", "compact_str"] tokio = ["dep:tokio", "dep:pin-project-lite", "std"] macros = ["rxml_proc"] stream = ["tokio", "futures-core"] compact_str = ["rxml_validation/compact_str"] [dev-dependencies] # net is needed because docs don't build on tokio 1.38 otherwise tokio = { version = "^1", features = ["rt", "macros", "io-util", "net"], default-features = false } tokio-test = { version = "^0.4" } criterion = { version = "^0.5", features = ["html_reports"] } [[bench]] name = "parse" harness = false [[bench]] name = "q" harness = false [[bench]] name = "escaping" harness = false [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] [[example]] name = "pipe" required-features = ["std"] rxml-0.13.3/README.md000064400000000000000000000057071046102023000121620ustar 00000000000000# `rxml` — Restricted, minimalistic XML 1.0 parser This crate provides "restricted" parsing of XML 1.0 documents with namespacing. [![crate badge](https://img.shields.io/crates/v/rxml.svg)](https://crates.io/crates/rxml) [![docs badge](https://docs.rs/rxml/badge.svg)](https://docs.rs/rxml/) ## Features (some call them restrictions) * No external resources * No custom entities * No DTD whatsoever * No processing instructions * No comments * UTF-8 only * Namespacing-well-formedness enforced * XML 1.0 only * Streamed parsing (parser emits a subset of SAX events) * Streamed encoding * Parser can be driven push- and pull-based * Tokio-based asynchronicity supported via the `async` feature and [`AsyncReader`]. ## Examples ### Parse data from byte slices To parse a XML document from a byte slice (or a series of byte slices), you can use the [`Parser`] with the [`Parse`] trait directly: ``` use rxml::{Parser, Parse, Error, Event, XmlVersion}; use std::io; let mut doc = &b"World!"[..]; let mut fp = Parser::new(); while doc.len() > 0 { let ev = fp.parse(&mut doc, true); // true = doc contains the entire document println!("got event: {:?}", ev); } ``` ### Parse data from a standard library reader To parse a XML document from a [`std::io::BufRead`] struct, you can use the [`Reader`]. ``` # use std::io::BufReader; # let file = &mut &b"World!"[..]; // let file = std::fs::File::open(..).unwrap(); let reader = BufReader::new(file); let mut reader = rxml::Reader::new(reader); let result = rxml::as_eof_flag(reader.read_all(|ev| { println!("got event: {:?}", ev); })); assert_eq!(result.unwrap(), true); // true indicates eof ``` ### Parse data using `tokio` To parse a XML document from a [`tokio::io::AsyncBufRead`] struct, you can use the [`AsyncReader`]. This requires the `tokio` feature. ``` # use tokio::io::AsyncRead; use rxml::{AsyncReader, Error, Event, XmlVersion}; # tokio_test::block_on(async { # let sock = &mut &b"World!"[..]; // let sock = ..; let reader = tokio::io::BufReader::new(sock); // this converts the doc into an tokio::io::AsyncRead let mut reader = AsyncReader::new(reader); // we expect the first event to be the XML declaration let ev = reader.read().await; assert!(matches!(ev.unwrap().unwrap(), Event::XmlDeclaration(_, XmlVersion::V1_0))); # }) ``` ## Feature flags - `macros`: Enable macros to convert `&str` to `&NameStr` and `&NcNameStr`, respectively. - `compact_str` (default): Enable the use of [`compact_str`](https://crates.io/crates/compact_str) for some string types to avoid allocations and conserve heap memory. - `tokio` (default): Enable `AsyncReader` and related types. - `stream`: Add a `futures::Stream` implementation to `AsyncReader`. Implies `tokio`. - `shared_ns`: Allow deduplication of namespace URIs within and across parsers. - `std` (default): Enable `Reader` and related types which depend on `std::io`. rxml-0.13.3/benches/escaping.rs000064400000000000000000000306451046102023000144500ustar 00000000000000use criterion::{black_box, criterion_group, criterion_main, Criterion}; use rxml_validation::validate_cdata; use bytes::{BufMut, BytesMut}; static RANDOM_CDATA: &'static str = include_str!("random-cdata.utf8"); static RANDOM_LATIN1: &'static str = include_str!("random-latin1.utf8"); static SHORT_LATIN1: &'static str = include_str!("short-latin1.utf8"); const TEXT_SPECIALS: &'static [u8] = &[b'<', b'>', b'&', b'\r']; const ATTR_SPECIALS: &'static [u8] = &[b'"', b'\'', b'\r', b'\n', b'\t', b'<', b'>', b'&']; static GROUPS: [(&'static str, &'static str); 3] = [ ("random unicode", RANDOM_CDATA), ("random latin1", RANDOM_LATIN1), ("short latin1", SHORT_LATIN1), ]; fn escape_naive<'a, B: BufMut>(out: &'a mut B, data: &'a [u8]) { for i in 0..data.len() { let ch = data[i]; match ch { b'"' => out.put_slice(b"""), b'\'' => out.put_slice(b"'"), b'<' => out.put_slice(b"<"), b'>' => out.put_slice(b">"), b'&' => out.put_slice(b"&"), b'\r' => out.put_slice(b" "), b'\n' => out.put_slice(b" "), b'\t' => out.put_slice(b" "), ch => out.put_u8(ch), } } } fn escape_preselected<'a, B: BufMut>(out: &'a mut B, data: &'a [u8], specials: &'static [u8]) { let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; if !specials.contains(&ch) { continue; } if i > last_index { out.put_slice(&data[last_index..i]); } match ch { b'"' => out.put_slice(b"""), b'\'' => out.put_slice(b"'"), b'<' => out.put_slice(b"<"), b'>' => out.put_slice(b">"), b'&' => out.put_slice(b"&"), b'\r' => out.put_slice(b" "), b'\n' => out.put_slice(b" "), b'\t' => out.put_slice(b" "), _ => panic!("unexpected special character?!"), } last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); } fn escape_preselected_v2<'a, B: BufMut>(out: &'a mut B, data: &'a [u8]) { let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; let escaped: &[u8] = match ch { b'"' => &b"""[..], b'\'' => &b"'"[..], b'<' => &b"<"[..], b'>' => &b">"[..], b'&' => &b"&"[..], b'\r' => &b" "[..], b'\n' => &b" "[..], b'\t' => &b" "[..], _ => continue, }; if i > last_index { out.put_slice(&data[last_index..i]); } out.put_slice(escaped); last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); } fn escape_preselected_v3<'a, B: BufMut>(out: &'a mut B, data: &'a [u8], attribute_context: bool) { let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; let escaped: &[u8] = match ch { b'"' if attribute_context => &b"""[..], b'\'' if attribute_context => &b"'"[..], b'<' => &b"<"[..], b'>' => &b">"[..], b'&' => &b"&"[..], b'\r' => &b" "[..], b'\n' if attribute_context => &b" "[..], b'\t' if attribute_context => &b" "[..], _ => continue, }; if i > last_index { out.put_slice(&data[last_index..i]); } out.put_slice(escaped); last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); } fn escape_validated<'a, B: BufMut>( out: &'a mut B, data: &'a [u8], ) -> Result<(), rxml_validation::Error> { let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; let escaped: &[u8] = match ch { b'\x00'..=b'\x08' | b'\x0b' | b'\x0c' | b'\x0e'..=b'\x1f' => { return Err(rxml_validation::Error::InvalidChar(ch.into())); } b'"' => &b"""[..], b'\'' => &b"'"[..], b'<' => &b"<"[..], b'>' => &b">"[..], b'&' => &b"&"[..], b'\r' => &b" "[..], b'\n' => &b" "[..], b'\t' => &b" "[..], b'\xbe' | b'\xbf' => { if i >= 2 && data[i - 2] == b'\xef' && data[i - 1] == b'\xbf' { // U+FFFE or U+FFFF let low_bit = ch & 0x01; // SAFETY: we are passing only 16 bits and the upper // nibble is set to all ones, so this is within the bounds // of a unicode code point and not a surrogate. return Err(rxml_validation::Error::InvalidChar(unsafe { char::from_u32_unchecked(0xfffe | low_bit as u32) })); } else { continue; } } _ => continue, }; if i > last_index { out.put_slice(&data[last_index..i]); } out.put_slice(escaped); last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); Ok(()) } fn escape_validated_v2<'a, B: BufMut>( out: &'a mut B, data: &'a [u8], attribute_context: bool, ) -> Result<(), rxml_validation::Error> { let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; let escaped: &[u8] = match ch { b'\x00'..=b'\x08' | b'\x0b' | b'\x0c' | b'\x0e'..=b'\x1f' => { return Err(rxml_validation::Error::InvalidChar(ch.into())); } b'"' if attribute_context => &b"""[..], b'\'' if attribute_context => &b"'"[..], b'<' => &b"<"[..], b'>' => &b">"[..], b'&' => &b"&"[..], b'\r' => &b" "[..], b'\n' if attribute_context => &b" "[..], b'\t' if attribute_context => &b" "[..], b'\xbe' | b'\xbf' => { if i >= 2 && data[i - 2] == b'\xef' && data[i - 1] == b'\xbf' { // U+FFFE or U+FFFF let low_bit = ch & 0x01; // SAFETY: we are passing only 16 bits and the upper // nibble is set to all ones, so this is within the bounds // of a unicode code point and not a surrogate. return Err(rxml_validation::Error::InvalidChar(unsafe { char::from_u32_unchecked(0xfffe | low_bit as u32) })); } else { continue; } } _ => continue, }; if i > last_index { out.put_slice(&data[last_index..i]); } out.put_slice(escaped); last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); Ok(()) } fn escape_validated_v3<'a, B: BufMut>( out: &'a mut B, data: &'a str, attribute_context: bool, ) -> Result<(), rxml_validation::Error> { let data = data.as_bytes(); let mut last_index = 0; for i in 0..data.len() { let ch = data[i]; let escaped: &[u8] = match ch { b'\x00'..=b'\x08' | b'\x0b' | b'\x0c' | b'\x0e'..=b'\x1f' => { return Err(rxml_validation::Error::InvalidChar(ch.into())); } b'"' if attribute_context => &b"""[..], b'\'' if attribute_context => &b"'"[..], b'<' => &b"<"[..], b'>' => &b">"[..], b'&' => &b"&"[..], b'\r' => &b" "[..], b'\n' if attribute_context => &b" "[..], b'\t' if attribute_context => &b" "[..], b'\xef' => { let (n1, n2) = unsafe { // SAFETY: `data` is a &str, which is UTF-8, which means // that 0xef must be followed by at least two more bytes. (*data.get_unchecked(i + 1), *data.get_unchecked(i + 2)) }; if n1 == b'\xbf' && (n2 == b'\xbe' || n2 == b'\xbf') { // U+FFFE or U+FFFF let low_bit = n2 & 0x01; // SAFETY: we are passing only 16 bits and the upper // nibble is set to all ones, so this is within the bounds // of a unicode code point and not a surrogate. return Err(rxml_validation::Error::InvalidChar(unsafe { char::from_u32_unchecked(0xfffe | low_bit as u32) })); } else { continue; } } _ => continue, }; if i > last_index { out.put_slice(&data[last_index..i]); } out.put_slice(escaped); last_index = i + 1; } out.put_slice(&data[last_index..data.len()]); Ok(()) } fn escape_perf(c: &mut Criterion) { for (group_name, group_data) in GROUPS { let mut group = c.benchmark_group(format!("escaping only performance: {}", group_name)); group.bench_function("escape_naive", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_naive(&mut buf, black_box(group_data.as_bytes())); buf.len() }); }); group.bench_function("escape_preselected_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_preselected(&mut buf, black_box(group_data.as_bytes()), TEXT_SPECIALS); buf.len() }); }); group.bench_function("escape_preselected_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_preselected(&mut buf, black_box(group_data.as_bytes()), ATTR_SPECIALS); buf.len() }); }); group.bench_function("escape_preselected_v2", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_preselected_v2(&mut buf, black_box(group_data.as_bytes())); buf.len() }); }); group.bench_function("escape_preselected_v3_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_preselected_v3(&mut buf, black_box(group_data.as_bytes()), false); buf.len() }); }); group.bench_function("escape_preselected_v3_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); escape_preselected_v3(&mut buf, black_box(group_data.as_bytes()), true); buf.len() }); }); } } fn validate_perf(c: &mut Criterion) { for (group_name, group_data) in GROUPS { let mut group = c.benchmark_group(format!("escaping+validation performance: {}", group_name)); group.bench_function("validate_escape_preselected_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); let group_data = black_box(group_data); assert!(validate_cdata(group_data).is_ok()); escape_preselected(&mut buf, group_data.as_bytes(), TEXT_SPECIALS); buf.len() }); }); group.bench_function("validate_escape_preselected_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); let group_data = black_box(group_data); assert!(validate_cdata(group_data).is_ok()); escape_preselected(&mut buf, group_data.as_bytes(), ATTR_SPECIALS); buf.len() }); }); group.bench_function("validate_escape_preselected_v2", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); let group_data = black_box(group_data); assert!(validate_cdata(group_data).is_ok()); escape_preselected_v2(&mut buf, group_data.as_bytes()); buf.len() }); }); group.bench_function("validate_escape_preselected_v3_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); let group_data = black_box(group_data); assert!(validate_cdata(group_data).is_ok()); escape_preselected_v3(&mut buf, group_data.as_bytes(), false); buf.len() }); }); group.bench_function("validate_escape_preselected_v3_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); let group_data = black_box(group_data); assert!(validate_cdata(group_data).is_ok()); escape_preselected_v3(&mut buf, group_data.as_bytes(), true); buf.len() }); }); group.bench_function("escape_validated", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); assert!(escape_validated(&mut buf, black_box(group_data.as_bytes())).is_ok()); buf.len() }); }); group.bench_function("escape_validated_v2_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); assert!( escape_validated_v2(&mut buf, black_box(group_data.as_bytes()), false).is_ok() ); buf.len() }); }); group.bench_function("escape_validated_v2_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); assert!( escape_validated_v2(&mut buf, black_box(group_data.as_bytes()), true).is_ok() ); buf.len() }); }); group.bench_function("escape_validated_v3_text", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); assert!(escape_validated_v3(&mut buf, black_box(group_data), false).is_ok()); buf.len() }); }); group.bench_function("escape_validated_v3_attr", |b| { let mut buf = BytesMut::new(); buf.reserve((group_data.len() * 15) / 10); b.iter(|| { buf.clear(); assert!(escape_validated_v3(&mut buf, black_box(group_data), true).is_ok()); buf.len() }); }); } } criterion_group! { name = benches; config = Criterion::default().sample_size(300); targets = escape_perf, validate_perf } criterion_main!(benches); rxml-0.13.3/benches/parse.rs000064400000000000000000006621531046102023000137760ustar 00000000000000use criterion::{black_box, criterion_group, criterion_main, Criterion}; use rxml::{Parse, Parser, Reader}; static HUGE_STANZA: &'static [u8] = br#"AE:D4:A8:99:38:9A:9A:D7:63:7E:CE:12:A9:90:B1:49:3D:C9:3C:E0:DF:66:87:D6:76:B7:7A:68:85:B4:BF:BEAE:D4:A8:99:38:9A:9A:D7:63:7E:CE:12:A9:90:B1:49:3D:C9:3C:E0:DF:66:87:D6:76:B7:7A:68:85:B4:BF:BE "#; fn short_document(c: &mut Criterion) { c.bench_function("short_document", |bench| { let doc = b"\nwith some text"; let mut evs = Vec::with_capacity(1024); bench.iter(|| { evs.clear(); let mut doc = &doc[..]; let mut p = Reader::<_>::new(black_box(&mut doc)); assert!(p.read_all_eof(|ev| { evs.push(ev); }).unwrap()); }); }); } fn huge_document(c: &mut Criterion) { let mut group = c.benchmark_group("huge_document"); group.bench_function("singleuse_pull", |b| { let mut evs = Vec::with_capacity(1024); b.iter(|| { evs.clear(); let mut doc = &HUGE_STANZA[..]; let mut p = Reader::<_>::new(&mut doc); assert!(p .read_all_eof(|ev| { evs.push(ev); }) .unwrap()); }); }); group.bench_function("singleuse_feed", |b| { let mut evs = Vec::with_capacity(1024); b.iter(|| { evs.clear(); let mut p = Parser::default(); p.parse_all(&mut &HUGE_STANZA[..], true, |ev| { evs.push(ev); }) .unwrap(); }); }); group.bench_function("streamed", |b| { let mut evs = Vec::with_capacity(1024); let mut p = Parser::default(); match p.parse_all(&mut &b""[..], false, |_| {}) { Err(rxml::error::EndOrError::NeedMoreData) => (), other => panic!("unexpected init result: {:?}", other), } b.iter(|| { evs.clear(); match p.parse_all(&mut &HUGE_STANZA[..], false, |ev| { evs.push(ev); }) { Err(rxml::error::EndOrError::NeedMoreData) => (), other => unreachable!("unexpected result: {:?}", other), } }); }); } criterion_group! { name = benches; config = Criterion::default().sample_size(300); targets = short_document, huge_document } criterion_main!(benches); rxml-0.13.3/benches/q.rs000064400000000000000000000030101046102023000131010ustar 00000000000000use std::io; use std::io::Read; use criterion::{black_box, criterion_group, criterion_main, Criterion}; use bytes::{Buf, Bytes}; fn read_perf(c: &mut Criterion) { let mut group = c.benchmark_group("single-buffer read performance"); let nbytes = 1usize << 20; let mut data = Vec::with_capacity(nbytes); data.resize(nbytes, 42u8); group.bench_function("std::io::Read", |b| { b.iter(|| { let mut r = black_box(&data[..]); let mut nbytes = 0; let mut buf = [0u8; 1]; loop { match r.read(&mut buf[..]) { Ok(1) => nbytes += 1, Ok(0) => break, other => panic!("oh no! {:?}", other), } } assert_eq!(nbytes, data.len()); nbytes }); }); group.bench_function("Bytes", |b| { let src = Bytes::copy_from_slice(&data[..]); b.iter(|| { let mut r = black_box(src.clone()).reader(); let mut nbytes = 0; let mut buf = [0u8; 1]; loop { match r.read(&mut buf[..]) { Ok(1) => nbytes += 1, Ok(0) => break, other => panic!("oh no! {:?}", other), } } assert_eq!(nbytes, data.len()); nbytes }); }); group.bench_function("std::io::Read+BufReader", |b| { b.iter(|| { let r = black_box(&data[..]); let mut r = io::BufReader::new(r); let mut nbytes = 0; let mut buf = [0u8; 1]; loop { match r.read(&mut buf[..]) { Ok(1) => nbytes += 1, Ok(0) => break, other => panic!("oh no! {:?}", other), } } assert_eq!(nbytes, data.len()); nbytes }); }); } criterion_group!(benches, read_perf); criterion_main!(benches); rxml-0.13.3/benches/random-cdata.utf8000064400000000000000000000177771046102023000154660ustar 00000000000000󱡓񵁭𓬑񾾏򗃼󽐮󹰮𽔮򆑂𔸍򘉽󫖋򰡛󻬷󘵷󡔋􀔮򆱁񭣭񩒺񣊫򐛨񰶸𺛹󁙇􊟄񭛌񼍷򒫨񷍕ᯈ󅺭򱚻􈰓򧻃󵛼󿀷󤽰󮰖𩹘󱙪񢹆󸶈񈒆𦺡켨𳊛񿱺𲣀󡙡񿎘󎃴𥎲􅮛񇬞񵐹󰙑𘹕󆕵󈦚􅊠􎞕򠬤򘍋򓣟纜򩺹󎽌󻕗󼕈򜑫򤚼򂃰󐰛򾀢𗵌󤹌몜򈦣񭛓󲗥󖸇􎫺𘞞󰗋󖝈񬝋힀񷷬򨑋򿮢𐞟怮󻮸򯓌𰜦𧤜򤗨򅼔򎍚񓞼𑚫𯎋񢐦򡽓𞣈񴰽񦻚񛦡󐙆𳍌󰴨ꮢ򡝂񅽯庇􍋟񀅍񠾷񹃡󽏻𡛤􇃼񂓥򬌈򾛞󢘔򢬡񅴗󋳋񵴻𢌙􀫈񵯀ꖘ򏤍𚶝򂷯𯿸򶈨􊦋񹉴򒻔𹗔񠋌𢚓󹳈󂒞󝙴􀮰󄝖򾆒󣇐󝲊񇅭󷆻󌬔𤀸񷶨𾋜񄣇󒏚󶫞񇽐񁗌𵹣񤻭񼛪򼾧񣮖򘎷󕰝񞠊񥍄𦶄󳱔󄻋񫆍󃼨􎩘󸊽𴦰𗉀󝜌񅜷𻙽񯦆񥋏󽶐𶒶협𩳱񶬣񣚶򋛩󫧸ࢧ􊆴񂼗𷉲󥭙򏨿𚒐򉒂򡵥𬼬􍱙򨗲󭼡򱩽󰊳𑼻񴋿󗢿񃟨񫧟򿕫ᅁ񬨗󶅦󤚺򺾖𥘤񨜑𙩲󣹔𑧺踄󀡖􏬗񿅀󚊈𺄀񍬁󫈼󌵅𳝥򍑒񣿝򁶲򕓒􆅴󹾙򨉏񩐐򽜊󒋣񗜩𹪯󞞰𾭡󰨚򋓪򧮧񤗽񏰟󺐎􇦯𮿞򚗙𤪤񥻳𙔯󕐲򸹷􉲅򰚖󌏷񑝄򚡺𾼜򰺀񠥸񹓫滐ַ񌌈򟩫󢜩𘻼񄸜򩸛񀰞𨖍򋢖󎱘񘦓󆞁􈡊󽦊􉽌𺏵𕷊󈫯𯆽𙝾􅄙񽈈󇿔󸴟򘠠񅕎򿂖𾵻􈜕≤򩄪󥋓񪪌񁬸ﻗ񰆀񇖟򾰕𥎏𪞁󂾹񭮧󁌠󈮋񸤜􌟪򾬣󥓁򤻥򴙹􏸹󃑫􃱔󼻄󂉋𳅐񽛪󎚞񠂪󼪤󝮧𷍒𸍑􃏋񐦓񷈏򍓙񗪦񳙩򵩙񱴶𾬀򃊗񶊾񛘥󇟘󐮝񥍛𽣮񑼏򼮰𧧝򭿂񿰚󜌓򧲊秆𐁉򕫲񫡯򗶗򔋔🼓𢫄񨚡􎁹򂿈񐔮􍡏򩟗𬆖𺥿𑇪󻃭𑰝􎶐򷊽􁙂򱊍񀃝􇽥񠪣􁲖򍆯𭏬򣁋򉊃𯓄򙩧󾷜𿶵󽦯􌉙񦦸󈢑򣘭𹮮𫤃𚭘򉒨񏐔󜃫򱻞񣕘􏉐񺨅𪥕򺵨򉋂􃑴󽧀񝓙𝐴󾫀𥈝󃊋𰲢󊷇򓕾󾬭򔚐򷱵獯󆞴򂨐򿷅񮐤򐴎򂌣󻮳򹣟󫲌񫚎󀱼𤨕𮛵󥂙󗐒𙼴񽗚𷃍򛈎󇐏ꙛ𿪻򉿖񑤂򞨜󋝆𶶝򶊦񼧭㦗𲋞򑾬󋋬򾳁􍖷򔖿󫤷񟳅㑾񾛝񵽨򮭢􈲳𸨢񩏼񾆜򾂕򐌟񜙠󿓧󔈱멅򠓷𯱰򌳂􆵬󰷋󏗟򍋾񽼝􍻃򡻁񇵞񆃔貳󬕰򞫐񞡛𶳦󙇞󗞑񵃼𣀮󹑦𣲤򊌜򁃇󚀩󺩝𔀐񔼕𤅮򢑭󻏨񥓋󒮂𱚟󲦋󨋆𮊽􏚲􎕌򳡨򓴦󝰏𧷟𨏙񫋜񘐫򾸥򯎱𾹄𪜍򲎱󞁾򛢉񮧗󦕢񟫞򭕗񵶟򑚬𶁌󠻌􎫋񽂁򦤭񸎒񎒯󠟱򃊦񷨣󌹘򰵆󵢚󣚹򿢉󁳥񶯷󹠩󈮃􎠿󔶍𜙍񋤡雑񥅗󹒇􌋟𬸄󞨥𤈏󮑧󒀵򨢖è僱񎴤󧦊򪟶𥎇󴑳󛊧񡣓񄐋򁧼񧷪򂵐񗟑񪽋󥣀󝥦􏱖󎤼󝡐󗄃䍆󮪤򒔗󞅻򂤂𮟉򑦠񭡱򰡢㠆򻑘𼾘񕡺򭄽򒠒󹬏󜬵򍨺򘥤򯁁􏿯喳򐷲񚁝򔯂򭐹󓜞򿅕󕳨򿈇𚷷񃨜𫷏򶞊򄝲󢌥򦉠󡹹􋟣𒀝𚟡󒦾􂨺󛖉񬋼󱿭򚒞򮸈񌾥復񴔘𡼶񯋪򹁤􄂅󘓙󫮤􏔢򨠭􉩣𺴨𽱝񆿬񩰦򻱍󵃁򬖍񻜅봀ꀧ𳳇𤰙񆇢󖝡񵔸󒑀𙑅󓆛򴳉񂓘𷰾򷔈𘁌򶜖ꌣ񐔟𩃋繖󰄉􉟖񚶶󮘱򼔩󩌧򿣕񸤌򔻩񏈗𧇂򢬓𥛍󯊈𣸇򳶢񯬷񪰙󞗝񋰲󘨜񡉛𔽛𨊣񁆊򸷘𭦥󭿩𼏜򪭸󦼙󘼡㞀𥾲􈹸󻌇񩳶񧷄񈦭򅭀􋖩񫝍󇃫򢘃𼗖憜򻠽𵲄󈑾򦝱򊫤匇򽹧䈪􌼰򍮅򜫯󏡠򦓙쨱􇡨𗲾򀎆𛳃񨕷銍񽋓񅤫􂚺󯫪􆐂𿄎𳑿񦓧𴺮𜌖󁦪󷰎񑔴󀆼򸔸򺖭񔷡񍜟𩟽󓢥񪋨󾋊鱂􌍆񼰿񉖇򒉟􇱗񝊷󚧌򈦪񦏗󵸓􏸧󋍧㊂𗌋󚄞򷳆򅡴􄣬񽉓񁼘񴮝𴟑𠋤񞪛𬮾𽚔񒠐𢉠󸄃󞾈򳵫󋲧򼰄󣧴񤻇󅿭򜶘𥮿𨕩𛮷񾦕򣵪񘘁𮖵򪣺񀹡𭾝򂲿񟪬񔓧񸹴򭊀󊕤򗠩󪺊󽻡ﺟ𭗰茣󑲢󀖮򴅽𐁛𴩥򁇶򛫕򭼸򖁳嬥򨤕󡓉ྒ􅫾𻸬񞽈񟩠룩򰼭񙍆𶾂󁜌񹽍򹱝񏮒񟕬𷙂󼥽􃖕񉶑瘮򳝶򪛄􏴝򌴀􁴿򼥕𠚛񒼰􎧂𧉹񢊥󩥞􄊦􈢏񫽳񕱳򷽪򲔙򸸙񐓒򏯶񙲢ढ़򽜯򪯆򻙬򘲺󏱁򑲳򴤸񻹔򻌮󟌦󼥆𐅽󭗓󾀒钴񥗡񰣫򭎟񝕹񬸊򙟺񆊓򰰪􇼰򩇂𬃪񹵶󙤂𳳴򀢗󇭉󛿷򉗳򙄫򦇿󌥢薕𚘱󅈕𦡉􁀻򇂆񓝣򅰯󥂓𛚱𗊮𱞸򥬰򁙷𞜀򸊟򠤢󌌰񙯼􎊞􅋷󸗓󹱭𙃜𽵄񶫏򠛚󎫈򣜘򎛓􊤟򐼛𷼪󈞋󸟟򞯅󦺠𨊗󔿆󅪥򕖣񡘤򬯯𤙝񶤸𕯐󳽦𜛛→󗳹񣈃񡜦􂸾奔𾏽𤻂빅𽏖񂮺򐽓𐪺򎇓񜥼𿳑񑙍򑍆캸󇎇䥝򑋪󀡅󽢇񴾡𹽌򵎗򀈧య𞱇𶠖󨤷򹩝𑿡򰝺򳵛񑀾񶀎𰌥񣮜􉥷򆼀𭔟񭌦󯮲꧓򧛆򠤈𯘪𢲫󤭺󥰽􃵩𴼈ఌ𷚰񗙞󛪽񪤾󓭜񨈈訣􏣳񎝆򸝨򬺵򟯒󮔏񯪗󣗕𐪻񠀝򝋿񳽭􍳛򺣚󈵶𒞕𮋳ᓮ៟񃆚񙎖򃀿񰄦𠓲􃪍񖯙򳪩𡯢񂔸򹙸􌎀𰆸񁫉􍥙󷕾񷄁񝷀󰕐춱񥩩򖗔𠗤񃞒񼳚򡩨񡨤󡼲󖞜񚑟𐌃괞𝕥쩇𮈼󋊇𳚊𓴜𜭒𠨕񽒣􈂴󊃔񂫡𤮼򴴲򧍗񴲱񅏤򚱜񁣨󯣊򣔆󖰁􍗐򹾮󡅆񀋄򶲽󯩕򱓓𾤌󹂃񉺂򏿭󅡍񔽜🾛򐇠񇀈򍈤􀵯񪒷􊍵񸭶󵃺񹌨ྍ񣜢𥢱񟥭񓚅𑰹򅂔󹜈󣤝򠶤򨄂񅊫򔯢󛟮𘰕񈼀񘾟󰳰񾤐񳮵󪡄򦬥󰈫򩵡򲓭񭁰񍣍􈃴𯩿𜟺𖺟ﯧ􄋿󲐅󁇬󖋖󯐼󝦗򧕲𠭶񘕧򞘣󲫔򻄺򇤟񮥇󡍎򗛾򱅰󖵯򭀦󸞕񞌓򜄇񗙔򊌑󏐟򦫶󓎊𽳚񸈺󵎷󉂁񸃡򞜛񞪨󪒬򄛻򢅞󎲲􅽀뗀󟯻􉃼󕍽󒓤񶡯󃜤񺐾󡳿񊫅󲝐񽀛񈻠򚩟򺑲⮌󽰫𣦮񙃏񩂽𔮅󬋲󉝋򉉸蝭꒏񂸬󓥝󖓮񍻣칩񯶔􍳉𧽤񝥤񁝗򟒁񆂌嗚🽙򋣵񾡬񻨘񙋐󘕓󒼐򋧥󪹑𦅥򀷆񝸐🈙񜝔򰜩񆘆򴍽􏞹𰠉ﶭ򥼃󮨷󱃶򳒒𻱐񜇻󥩶򫵒𲊃򨄾𰙐범񏛌𓂒񄾓𾑁򳂸𞫣󷏜񰥙󱳏󮢖􄈺񖈍𶝛󁈀𖪆󰤙񩦓󓲶󽶳􀓄򃿰衳򆔍𡷀󣠈𹲓򃫪󻌹񷴨􄢂򿧺󁾏𬙣򊲭񊪹򇳭𔳵򥹯󮖶𾀘𺮂𘨨򿭑𘹺󶲏󬂽񁢰󛫆󈕅𥯶񂈋𓌘򸕼򌟢񤝍򩝏򨚞񁞹𽭈򣙍򝯹𺤷񝵾󥵧򢕖񍶹󠲪󂑟񞷃򨊀򊛵𴲠𰿀󛛥𹜯󭫲󈟍𕓋𫾔򍘞􁞚𵅷󔧩󚞧񽎎󹁒𨃅󨙓𻐅󓳈󧷿񴡆񖺎􉔹𛁵򅗴𾞬􂯒񮆱𝹄񭲡󴚊򈲋񳾝󅪒񉬱񗨅񬀏򞆦񐑞󝇠򕭻𠋎𺓴񣒁𸍇򗕷񓮔򞲑񾑷񲟧𧤭򈸁꩝𳳽𹪘񙵱򃺒󽈟𜳵󐣀񫁕򐚏񌌏󀿻񟬤𶅋𺌖󰷷򥑲󁦎󪁫𪰵󌍪񑪍񞁅𐣬𝈹󹼑􈙔荃򘡎񅱜𻄥񁆠𝩄󃨢󖌓󏩺󺑇󙽭󍭺񤣆򊮢򂄿󨸐霿񓴛煘񏾘񓲑򷯤󛭦񹏮󟏼񯣫󍗬򨷯󵛯􀩠󴐸嵅ቅ򵾹󬨙󯵀뛤򾎿򕯈񏴰𡊺󮠽􅳲񃊢򒴋򫇳򾖴󹙙񳷹񦿌񼚳򊭭󨧭񤺟򄎡󦚗󕂑𓪉𬑘ᤌ򜉇򿴑󫈚򬡋񙚐툡򦣌󦰾󢞠𫺘𥸻󩆬򁙜󶣌󮂽󔚅𡲙񘅣𖼨񶼝򫞶􃚐🫩󢚝􊍇𦶄񔑝򎦐􆙖󙄷󔡫󹖯򗺧񹈨򕐛򜎤𦡈󑓂񥵨򪹓񩚏󾉎𝺭񳵏󲌞𐆋񣥜򵯡򻙅񊝁􇐍񢃫󣱉𷄤񚔺򉿲򓼖򼢥񰴠𨾍󬎛𱀙򘀜󗈚񀒂񪖣񢠐񙷅󹿁㥨𥆿𝤉󢘓󁙥󦅕𔺑򞑁򨮏󍾎񇮬󔴤󁥾Ặ󞍍񗊳򩩧󋀈򡢧󏳶񋩚𨀆𕅂򼟽󇞕򿅥ﺕ񮛄榏򦷸񪭜󄖰󯠩󉘧񤱨񫌨򷫓򳒫򝣽񍎺򇤒򥕗𸀸񇉡󴎺󤠌򒀁򟢊𢒪𔒿𤞑꨹T𰋹񑋓󜠥󬝝챧磖񲵉𖦁񎵦󛋐󾪁𪩯𧻇󫀢񳹕󙇖󌈭񇪷󤢉񆡱􌫖񤔃񢎢➆𑜝񛊠񍱡򖊦񪨎򌁯񫃷򵴙𾊷󸼾񋼽󠈅񈥲󬏻򇌑󐫳𔶞𔥧􉆒򩍠򖬅񻇾򦜧󈡻񧶜􉳅񢡪񥚌𶝆𛻠𜭂䦙񵼦򾮱򆙢𫍎񢒼𖷑򫔏򖤥󓳛🿷󄄟੶𲝻󲹨𰆈􄒕񦽽񸽒񯪎󅃤󩧔󟼲󄚢𞙐񠸔焿񃂃𨅛񆉬򪅳󔨦὆𑖅񥕙󄶷򎣷򸪕񩜀򶬷󃇇򊭫󲁑񶷤Ọ򇊐󻾤󻄺𰃄쪣󱩻񧤙𒮮񃼦򫤿񇦃󦷰򔦅󝎰񱣁񢻩򸙭񟆤񖆎򓇼𧐷򇘺󫃁񸸠󰲚񑨻񮦍䁢񻹎𤖈󆉛򱞽񲻛񜓹򝝚񆡤􆄶񡑣󗏘񌆚󷺚񔭯󹬃🷹򒋒򸉯६爯灇񠊺󉠗򂙆򀺑𰳪􀈷򊎧𰢏󴘏𙦇򟖎𽑪򷦩󤨏򫧒𺷀􋏗񕩸𺤇󲆿㤡􆟛򩳖񁋡񽏶񔪙􎘰񰻢񮪴򔷹𭜱񲄍򰿡򍭐􅡄ŀ񶷳󶢹򛹖񹫫񒙟󰊈󩪂򍣉𛾑􍞆񸛿񧛫󏼗𐙰񒮖򈒿󚠁􅊁𘨽􍆊𘡠񂤡񦦆󫹓𤠑󻴔񘁆𝅍򢜻񢫋𔟟񿛀򻜍񞷪󳲈惘򈍸񄄥򀮳󉘜񍠕𳲮𗛌󻫢󛷔𨆕󨥫򍪺򾇎񨎚񪲞󭡷򹧰🇤򶶦񀲺𘔅񳐞娰𬼨񜏼񸤎򜥽񨍏򠈡򷝷􁒴󍺌򷁽􇠷򾰾񜸖󄡠񔖓򺜶񨖵񋃾򱗲񐶢࡬󰆿򢞮􀜃𾒪񡵐񶥒磄󺪜𭃡󺙅񾅻󶘆ᑖ񂇦񰏏󞖆􀔏􌛵򞙓󑐀񛵼򡔭𸘔𞩷񁂸򄺪󜜈򰶸򢈬𙍂􅤰􉒄𷥕𼩆񀚉Ⱥ򔮭񚨹򰉋񔪣򲼪򚌸򯅦񄇝񝌉𺟟𻛷􄸊𓍟񙱅󥓼󝞀𭭏񩥹󩝣򟗳񵍓󰨲񏷲𑡁񋬻񧥜󸈖􏹇򠃟򩄅𸭈򓙸񚖀󬂄󋏯칐󛢂񖿙򑛮񋅐񩁞𥃒񫩋񧢤󆝳񓒶𖲠𖓟򑤅𤽻󶦒𸫲񍈆𝲪亻񠆌󋤫񴦢󵧷񠘐򕢩񅐱񄺛򨩨󛐶񄖐򉭄󊽦𢨠󐍉񶱎𙻰򔝻򻶄󜎀󱖑󡕙𚎫񱫱󊴉򃣗􄩔ꪭ󘆘󛰩𽧘򊣄򗛃󡪨󜏚񸴃𹾕󔹜󴣔󁑮򙙾򦋯񸯇򿘿򿿩񓦟󜃞𨑉򿇫𜭂򦺓񀧟𓽗力𾗇򂎽񀖱􂭉󮰧󑁵𶐬󕣗𣻜򾻩򱘼󏋕񞕒후󈑌􂻵𘪽󼐋𾾀ʕ𾘸񍞒𐝆򗩞𷋹𔲗񜖺񼾎􇦑􏉡򦒿ڥ򉡪􄅡󔑸𔭍𤞄󇾸󹀙󁥵𱐅񃚵򁈷𮸑򒅬򲚏𡏭򧴜𪘋􋻸営򊷵􌨥򦘴𘾵 rxml-0.13.3/benches/random-latin1.utf8000064400000000000000000000200001046102023000155470ustar 00000000000000=Sް¶bÁ°âL*'”íƒ#[šV¸fH¢ _ʯ߯ôIc‘l’+œmMHÀý¥(„I})ï|¨uFÚ²w†‚.•m†šX Z~†ëÅÀçÈ Q×ZlÁ‹u£¢ÈÑùÓ9uõ~Œ“Õ G¸bòÒoÛV³ß§í°ì×µ‡ogpÎøcY¨¦¿(öüõ¹Nt#µüîiËÁ¶ÒðÇWÚ½U#÷–Á_\ý͇¹xˆ\âë֕/ j‡<ýÄúìjw€fo^ÿçf—î¯!Œ0bá"\?¶‹0B¨"=ŸO‡?TŸÀ¥.ú)A\È^ó}ü«…ì¥þ¤–"¤Oxåq)’eÒúÝþ3:óðèzóY<$½²9ßÂ×åÍi£Ž“\¯•aP@¬¦gt;“ÝŸ˜Ö^ãPyºI/w]->3y¤§OªŠÂïê±GAŠŸö~ÁuÃ,¡œíF¢jXT‘Å…+ð±µF`ƒœAaÀ}C¹;™±l”Mª—€2µã˜{:øÛß­F5 îkWþBfð/‰>âföºùғ–SêH·Ä²º»¾Ì=Põvì××fõ@·™Ù–`é2 Éç)Ûúcëp ¼Y­”ñ¡8ÞfƒÚ]ë¼Bß½AïšK‡~—¼ngêvN^îi~ñƒ>·‰ü¿©6K‹›óœÝÖüìg´ú­õVӟ̍ ýC,ò!Vw¦k@Ò6X‚,s¼>'§|yËFÑÌ?ò́2Öòɉ¤R›êŠÇy$µn9,‚WLdÿ¿QWY'Í8ÑA‹Yé'X¨€F›wJÂW9ŽÿDMšŽkTd?œ·q$UlͯiŠQͶÈ(z¡?BÕp°×¶³<~Z£;xØ¥9+•ëßs§íÿ0FXIÄ×ÇÀ"Üá3N^˜j²£®*÷`- HšXŠÃC0V›#xSDm@¬«13§ðْ‰Bÿûàsô 3×Urhä÷aNàlEð3õúƒ#×.špFǾÅKî€#Ú¡´„Jõ@¬6DmñDê*}ŠfF]´N&KI¨&0·x¶wTuñA<`} ÄTÎì‡íÑ!Í×jl×¿wŸX1õO‡‚>ȩ́[®Q˔Ô:‚MëvAHL…*y¥°@„ ¾¯1Óĵë,®úʔQµ« ´åsZÁ`ÅÓ»QBE³7@)ę4ep9•MIؤ÷öqH,Ñüf!“UN-¨œZ<Á‰ëtœ+ÙÛà æÙrC!ïÌÊoÏZýŸcë_7\ÌÉý£ÐL¶yZþ˜ÒD6a >Ú¦ï$»ÑžçøØ£­TÈVíxY™²†nÑ섇ÜÛöïUw¶|æ>fKyK€úeƒÉ«TQél¶éî´/Qêcì¥ÑÿßA•yWiÜaä>uyÈg µ[b»t–Î׋R`4¾)‡à‚¸Fe¶øn4#êJy¿?„¥kê†Y©ÐñÕ{z³kJ$ÆÐS$ZQóDp~ þ‰›¡LZíeH îW‹|óý“Údó:ïb’ qÀ’¢Ž,'KÒH9³Ä*…ˆ‡• ôj£¢vÐZDç fb½ìZ¤cpSí±w®ÙïF‹1Íã;÷õOvÙUf/;d;‹ÙX÷bê{mOÙ R™>]×°VåéƒNƒ:·¿.Ñn•'DQ¬Š¾¯$:Q^>âù®+Ñ~€0Æq,€ïaÂêd—F„5@3;äbMƒÖ“ElûR/‰|>GÜΡÍÔ2è}^#^è0Tçïß©/u£O$F¥>.…¦Â+©{”ºr*’fʸc%ú¦AM+ÇÌ>¬Ïò½ðÛ§ýQ¯p´TÐ|5BÞîM°ò©š– Áï7 -p\nÍØ`rµuvdŠtzö¤ÿv2¼‹m”Ï4CÉÖØðՁ±€Â¼Á®W³wã$²ÎºOõðÌ/¨á·uÓÄq ;ÅL§,¿éä2˜}bH¹j=Góv絺š i¾çï>ùNh"Ôå¹sc€À¦§:™ #zåôeZu€‡ªV'¯¦}wpi·ßª—2bãúÃ&Bž~·É n|*ælA\jDÚ:‰\"4Á0»c:×dª‚ÐÍNMðC(ZpG&b̳‚ÓgÉ5tçžB¦ÁŠ­“έ@¾ã¯šÍ ØžÜÎ^Bj¾.ó¿b„tX§'0,r®7"/ËIǒŠM•áÓ|rPœ–7`b ج‘ìš1>ÌVcØÙjÂãÿô×ÄNB»ytÌ:Nf‚$¢kÜø‰Åjç11âða"±œ( ôyã:ìÐdi€ò{Êf—ªÒò92ÝÝl­døŽx :ÎÛ¹ -S)ó¸Òx]šŠà¶5S{D‡Ü«ü2à>ú-&è×k:Ž'ê2Î8cù†FŒmvVv­0W•Än|‹Ä,Aä¹öOôÝXÚEֈ×6§´ÎŸ«ûâhzêuX¸®¯Bþ†´a{ÛÛD-q}î¡Ö|+Îx³¾£˜é®Ê‚¾eÑۊÉY†J×+’$‹áŠÏ™÷ÒޢܪÈÏ̃¸ïœxsIl:'ÎÒ­ñ”U µ£ íÓÜÒɛÞȊMÏÍs”F.М®ÆjÞ Dáƒ#ùXB¡ù͸.ýðɧ1|0k§Ù =ËÈ ZXz)ð=+äITÊ#åk§ üCÆvbŽ/å‰î¼jW íF>Ï49_ß*’:C\NNàá (¥§Ú9©0wp×­u¢ã†sLü]¢+[­Œˆ90ûõ-Yó¾ðN¤2I¥ÑS§Ë‰mõàzØ(€³+3˜×»ð›É¬aa„fÃØ^Rs`nþsùäò&AËD Ì1eÏc†Ñ›RH$Ú¨ÍG¦’O–è˜ûOÓñ#êå("d¬E6ÒºÔî(%>Øµ°‘…¬p}Ì©B“r4ð:²’dâå¯÷D<îaójH৙‰yâëF¹Š!4üo&ŒTu¨‘"Œ.£2a{Xíû v§ûßí+­e.k,+f¢cñ´}jf?0…^ÈrÜR!T‹4È]qWhIÝÀUTLRP‡Ñ'ÕjH­í¨;Ž7wÕXç‘XÑò=‘ÐÆwR­ZÓµ³„šIÜxmê)§DGVÐBÚ鷎úÏr^r‡ÖxÄ҂¸Kš õŽC°ÆQ¥ý"cÞCàԡمFað1 CšþkáÛ5ÎôÛuçT3ÜU_*ffrٗ’ÎÞsSúUŽv/ŠUb’2w®_óé2ÜØÐÝ(Õ Èܝ‚šÁã¬ÈºÃ˜"pF§K _F¾ò¶Š5>y8qD!¶á,ëf¬þ9§Pœÿ)O­ 5Ðñ½FþZðÜdò\ém3Qk»·Neþó{Øw‡›¾÷H;½j>Ndÿé@C‹„‘g!2k¿ui0š/®•'ÍX_°çæªø®ÛÛ'€PtŽã*¶I·¦Õb: Ør Ðwš…)EB·ÿ)ûõZÃ!õ÷>/•[=á-/äwÌ©c! œ®óQ!À&-,ÃܬÈ#æó{zJµ$éÎøøéBˆ È•Ñ›¨?ïûl%2+k#ê„>rW ýsýˌƒ’É`K6%ÅȸBó`ý~n‘!K¹}ÿÏgËÃt{CfÎm›Å[m©{ö}ž8TñÒ.œŸ÷ÿ¨=™Ô4Q€ûalþ6q_"8Njý¤YåfH21ª–XhsåN#¶òÍ8„¿ª½û{F9½î5wUTþ+›”ÀãRp—1ð¨]€c·È©sa@ÃÚí;·ñá¸9ñ¼OÀВ‹˜&kËDä+Ù¹óni´â¦Ksð®|¾D Ugv1\j±‹<ÿþ[ê?»É=lzÑÿyV91oº¼Ù{Ô6톬 ‚‹ã~zZ'>RƛE;pˆExEðý7‚Ç âðáo,=ď«Ö#.ÄÛÍu:ÓKoNñz)fÈ· ŒIÀää××4æáCzq¦®dü¹U´èDxl`ÑY-Â]ÃÎ ®^ðè:ºÝˆÈKQìSÆ/Ú¥ðE³ð…×1ÍE4Ô!0‘þA‹ì$¡‡ž“«ê-ûkWvIÏ%ªWÆ0ÃL´XÎD<çol¸%MJÖSr‹Qt°d€Gô™¹“2òêÙ**3žuÝ=,‰;ÈÃð‰+ÑՕ1h§ÈÕq0åµpeKe«Á™0ïîŒÿ Y©bþñÿ/§E-Ö;‘“øB€EGDj‰³<¤×Aë„§D•-v9•R¹Û%%¯Ã§}ý7xWaj5#Psjźu€‰úàsxôŠªCbÝ?B-ØwÏ ­”9|{bXÓm×Îæ!9ó¾Üi1BóΧKç &vÆ/Œ›€9Wp0Ë0Ï÷e Ï]®=j½ÿu9n]öóUªkJ_Ñ?€W+÷É䔏}[Êq '¦›K̸ᜰֿ&ýøO~­y¶Su¥ÛBø7Œ>ß49«º§ÿD<¡¢SôU‰»tÁ»Šv‡ø'f±y1¤$̀ý&B s±ŽYü/¾xï*8“[œö\÷$`õ:­ºPæmxD®µÎaœ€+“wõ@-ÄxâùrÀÎü$[þO¬S1ƒæw¯]1è,XÅ.¯Ù—å4ƒO`ñû韼U՝®4ü«ë=¿Ò:ÿfüÜÏÿ'ðŽ~LÑx=vB£éмñö❆8°u¼»Þ!.ýÅÔ>Yu@¯œçRÁ,ŸUS}Xå”܏•þÓÕ­æ²8SaLi¿w°&Z”,N®åP„·Œ€ˆ4¼Ní.éúø=l¾Ø¤q±«OÐv㞩ã3®e¼æW­ÝuÀ\$µöÕD' [3’Re¾uÃ"¦'}ä/‰ä§×Y£"l26¶)Ž·9¨+;IÅð¥slˆóñ:«]Á¡Ù¸¯®5·KA¦fÁ\€ÚͳFaÏúÉÛ5µEÄÄ︂£uQbé *¦ÄbÕºoWžHv)ÛíîØQkʛÂ{V÷v~Û÷ïoŠº§™ÇqP›*0ðÀ§ÑœXÔ¯!+§êüëwnæzTOÙóº)Z1¶$Oab—|‰"¦R‘WZþê¸úÝÓ¿õSã_Ì%~mÒV烿·Î‘¾T:VJþØí»$Û×é-õ;4§s/“<2„×ìJn޳n›?„ç Œùê0& à®®RñxU7W˜#‰—wù…z á$GÓR¶ÖœÝ²äG˵×ÈBI%._•ô9þNðEn_ïyœesÍÍt֏ŸiMŒ-*订Uê£9T¾ h羽 ;Å ÝÆ£2'Aã6`Ëì+Öžn[8rpfwܔÊ^6²¦åñŽýkf¡"œõî¹{úÑ{¼`Ybg[Òk¤i%͎ÂGa NøŠ™õ¤´ôæ_.……[çb·ûG_‹IÐÚ.ñ|OBëIÆb…Ã’F|–ß5÷@eµàá@LÀEÉãÜÜÓMè8Ä«”_Ç2õ ÓoLÌji³Š²9vaÁò¼¿2Àü<úÖ¿>@î 7TïÈqQ®ÿG6.eXˤëT»“´Ý8]L%¨qÊ(™sà¿6Ùc Ðw©ÍKùGâC£GáµðQ?_ù¶&ÎÃ0ÂM}ò7rÀ}Ñà@-ñ×¥e­÷Gøn–a­¡`‰CO@염ϥÛI{%ð‡Êþ1pn-ƒ#˜Y¹¥èž‹®Û:_YXò€Ú>#.–”ë¨&ðx ½zßcÛ°_.oÐÞ&bf®´‹S¦8ä‚ór½1Þ¬ýÎf´êoSèã÷šb(3=Ë ¶HÛ°Ë[ùÙ1ˆvE'Ã5Çô_‰(Ätˆ%©¡üQ 9pªT‹GêáãK—Ý2iÁ‡â£–Õ™‡OTUªÏ¼»}²EL^îÿÒ:f2 èeÃÚ±¤¾àђ;$½…TÁ®ñè2l€2># aëÊSkJ¼™ÙFÔ8šß)Í -kr¯ÔJVè_ã½ncœnݬ½è·BoQ±`OÂuäËö¾¨¾^ޝLˆGNc’7,Rƒ7þÒU*Ñ%ªRҰЦ&¯°A³¡ëþ¼gNíÈIHӂ 3OðîÜ=/P²‹çZ¢Òöûc.§tc-Gĸ‰Ô3ÕýÑc\¯­ö*íê±ê²ó˜}ö8I>¿¨±{¼‚B‰°WÛbÆê¸+jØ>º–1u*âït½GGÚÂs÷lþ5£é6é‚óò}] åižÖÁ)/™ékuš'.ïmÖË3V"˜ƒPB^þZÍQ×9`D˜qËÐ=Š7L€#B¨ïûZNJ ‘•ß±¢\E¯Å¥TEoœl·ì™ñLR&…¶‚ü¢»÷îQFdOm ¥î"áЁGÄõ“÷ºõdyÄáCÑkôÑÖªž*¿ÈJ3!T%¤Wöƒµë]yúrG ±%‚]ÉHËZú,û‚Ôˆ:ÎLúŸ5éö¼A®9`9Çw)1ž£œQ„Ç–ÝƤN¢R¸<ŽžrKE®}êcißèQc>™FL`‚Q­Û£ø€t÷£ü/>cBcÁ¿·½’æîâWÃÙ'ܗ{:²Ò?Mtӆf,…¾ˆº>†*…Û IrtA͙jxR}l*ƒÞeBBÿÀfèÔ&>qì–l3ÂkrØu`dc rxml-0.13.3/benches/short-latin1.utf8000064400000000000000000000000401046102023000154300ustar 00000000000000^9ÕÅ4’ó!…öhÍü±ï›’á rxml-0.13.3/examples/pipe.rs000064400000000000000000000011371046102023000140150ustar 00000000000000use std::io; use std::io::Write; use bytes::BytesMut; use rxml::writer::Encoder; use rxml::Reader; fn main() { let stdin = io::BufReader::new(io::stdin()); let mut stdout = io::stdout(); let mut enc = Encoder::new(); let mut parser: Reader<_> = Reader::new(stdin); let mut buf = BytesMut::with_capacity(8192); let result = parser.read_all(|ev| { enc.encode_event_into_bytes(&ev, &mut buf) .expect("failed to encode xml"); stdout .write_all(&buf[..]) .expect("failed to write to stdout"); buf.clear(); }); match result { Ok(()) => (), Err(e) => panic!("I/O error: {}", e), } } rxml-0.13.3/src/_spec.rs000064400000000000000000000045461046102023000131310ustar 00000000000000#![cfg(doc)] /*! # Restricted XML 1.0-1 Restricted XML is based on [XML 1.0 (Fifth Edition)][XML] and [Namespaces in XML 1.0 (Third edition)][XML-NAMES]. As the name suggests, the features offered by Restricted XML are a subset of the features offered by those standards. This document details exactly which restrictions apply for Restricted XML. All Restricted XML documents are well-formed XML documents, but not vice versa. Violations of criteria in sentences or paragraphs marked with `(RX)` MUST result in an error indicating violation of the Restricted XML restrictions. In other cases, it is possible that a generic syntax error is emitted. ## Grammar changes - The `Comment` production and all references to it are deleted. Encountering the unescaped `