diff --git a/Cargo.toml b/Cargo.toml index a2dd99c..37bbf86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,5 @@ members = [ ] exclude = [ "sailfish-tests/fuzzing-tests", - "benches", "examples" ] diff --git a/README.md b/README.md index 7dc9c0f..833fca6 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Simple, small, and extremely fast template engine for Rust - Simple and intuitive syntax inspired by [EJS](https://ejs.co/) - Relatively small number of dependencies (<15 crates in total) -- Extremely fast (See [benchmarks](./benches/README.md)) +- Extremely fast (See [benchmarks](https://github.com/djc/template-benchmarks-rs)) - Better error message - Template rendering NEVER fails unless you explicitly return error. - Syntax highlighting support ([vscode](./syntax/vscode), [vim](./syntax/vim)) diff --git a/benches/Cargo.lock b/benches/Cargo.lock deleted file mode 100644 index db4fca8..0000000 --- a/benches/Cargo.lock +++ /dev/null @@ -1,2610 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "adler" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc9a9dd069569f212bc4330af9f17c4afb5e8ce185e83dbb14f1349dda18b10" - -[[package]] -name = "ahash" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" -dependencies = [ - "const-random", -] - -[[package]] -name = "aho-corasick" -version = "0.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043164d8ba5c4c3035fec9bbee8647c0261d788f3474306f93bb65901cae0e86" -dependencies = [ - "memchr", -] - -[[package]] -name = "annotate-snippets" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c96c3d1062ea7101741480185a6a1275eab01cbe8b20e378d1311bc056d2e08" -dependencies = [ - "unicode-width", - "yansi-term", -] - -[[package]] -name = "ansi_colours" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6" -dependencies = [ - "cc", -] - -[[package]] -name = "ansi_term" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" -dependencies = [ - "winapi", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anymap" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" - -[[package]] -name = "arrayref" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" - -[[package]] -name = "arrayvec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" - -[[package]] -name = "askama" -version = "0.10.0" -source = "git+https://github.com/djc/askama#0a6284aa91e1eb8da81d7b317fb539653e519d0a" -dependencies = [ - "askama_derive", - "askama_escape", - "askama_shared", -] - -[[package]] -name = "askama_derive" -version = "0.10.0" -source = "git+https://github.com/djc/askama#0a6284aa91e1eb8da81d7b317fb539653e519d0a" -dependencies = [ - "askama_shared", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "askama_escape" -version = "0.10.1" -source = "git+https://github.com/djc/askama#0a6284aa91e1eb8da81d7b317fb539653e519d0a" - -[[package]] -name = "askama_shared" -version = "0.10.2" -source = "git+https://github.com/djc/askama#0a6284aa91e1eb8da81d7b317fb539653e519d0a" -dependencies = [ - "askama_escape", - "humansize", - "nom 5.1.2", - "num-traits", - "percent-encoding 2.1.0", - "proc-macro2 1.0.18", - "quote 1.0.7", - "serde", - "syn 1.0.33", - "toml", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" - -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" - -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - -[[package]] -name = "bat" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91f17c2d9e1cee447a788a15fa6819c0cb488fb2935e3e8c4e7120e1678b7aa8" -dependencies = [ - "ansi_colours", - "ansi_term 0.12.1", - "atty", - "clap", - "console", - "content_inspector", - "dirs 2.0.2", - "encoding", - "error-chain", - "git2", - "globset", - "lazy_static", - "liquid 0.20.1", - "path_abs", - "semver", - "serde", - "serde_yaml", - "shell-words", - "syntect", - "unicode-width", - "wild", -] - -[[package]] -name = "beef" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "474a626a67200bd107d44179bb3d4fc61891172d11696609264589be6a0e6a43" - -[[package]] -name = "benches" -version = "0.2.1" -dependencies = [ - "askama", - "bytes", - "criterion", - "fomat-macros", - "handlebars", - "horrorshow", - "liquid 0.19.0", - "markup", - "maud", - "ramhorns", - "ructe", - "sailfish", - "sailfish-macros", - "serde", - "serde_derive", - "serde_json", - "serde_yaml", - "tera", - "v_htmlescape 0.9.1", - "yarte", -] - -[[package]] -name = "bincode" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30d3a39baa26f9651f17b375061f3233dde33424a8b72b0dbe93a68a0bc896d" -dependencies = [ - "byteorder", - "serde", -] - -[[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] -name = "blake2b_simd" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" -dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", -] - -[[package]] -name = "block-buffer" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array", -] - -[[package]] -name = "block-padding" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" -dependencies = [ - "byte-tools", -] - -[[package]] -name = "bstr" -version = "0.2.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - -[[package]] -name = "buf-min" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4ab58c23b5bf0d27713787d5dcd5f62c2260ca172d5af24b7de706bcc2897f" -dependencies = [ - "bytes", -] - -[[package]] -name = "bumpalo" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" - -[[package]] -name = "byte-tools" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" - -[[package]] -name = "bytecount" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" - -[[package]] -name = "byteorder" -version = "1.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" - -[[package]] -name = "bytes" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "118cf036fbb97d0816e3c34b2d7a1e8cfc60f68fcf63d550ddbe9bd5f59c213b" -dependencies = [ - "loom", -] - -[[package]] -name = "cast" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" -dependencies = [ - "rustc_version", -] - -[[package]] -name = "cc" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c1f1d60091c1b73e2b1f4560ab419204b178e625fa945ded7b660becd2bd46" -dependencies = [ - "jobserver", -] - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[package]] -name = "chrono" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0fee792e164f78f5fe0c296cc2eb3688a2ca2b70cdff33040922d298203f0c4" -dependencies = [ - "num-integer", - "num-traits", - "time", -] - -[[package]] -name = "chrono-tz" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d96be7c3e993c9ee4356442db24ba364c924b6b8331866be6b6952bfe74b9d" -dependencies = [ - "chrono", - "parse-zoneinfo", -] - -[[package]] -name = "clap" -version = "2.33.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" -dependencies = [ - "ansi_term 0.11.0", - "atty", - "bitflags", - "strsim", - "term_size", - "textwrap", - "unicode-width", - "vec_map", -] - -[[package]] -name = "console" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c0994e656bba7b922d8dd1245db90672ffb701e684e45be58f20719d69abc5a" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "regex", - "terminal_size", - "termios", - "unicode-width", - "winapi", - "winapi-util", -] - -[[package]] -name = "const-random" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" -dependencies = [ - "const-random-macro", - "proc-macro-hack", -] - -[[package]] -name = "const-random-macro" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" -dependencies = [ - "getrandom", - "proc-macro-hack", -] - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - -[[package]] -name = "content_inspector" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" -dependencies = [ - "memchr", -] - -[[package]] -name = "crc32fast" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "criterion" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70daa7ceec6cf143990669a04c7df13391d55fb27bd4079d252fca774ba244d8" -dependencies = [ - "atty", - "cast", - "clap", - "criterion-plot", - "csv", - "itertools 0.9.0", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_cbor", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d" -dependencies = [ - "cast", - "itertools 0.9.0", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "lazy_static", - "maybe-uninit", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-queue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "maybe-uninit", -] - -[[package]] -name = "crossbeam-utils" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" -dependencies = [ - "autocfg", - "cfg-if", - "lazy_static", -] - -[[package]] -name = "csv" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279" -dependencies = [ - "bstr", - "csv-core", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - -[[package]] -name = "derive_more" -version = "0.99.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "298998b1cf6b5b2c8a7b023dfd45821825ce3ba8a8af55c921a0e734e4653f76" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "deunicode" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" - -[[package]] -name = "deunicode" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80115a2dfde04491e181c2440a39e4be26e52d9ca4e92bed213f65b94e0b8db1" - -[[package]] -name = "digest" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" -dependencies = [ - "generic-array", -] - -[[package]] -name = "dirs" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "dirs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" -dependencies = [ - "cfg-if", - "dirs-sys", -] - -[[package]] -name = "dirs-sys" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - -[[package]] -name = "dtoa" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134951f4028bdadb9b84baf4232681efbf277da25144b9b0ad65df75946c422b" - -[[package]] -name = "either" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" - -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - -[[package]] -name = "encoding" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" -dependencies = [ - "encoding-index-japanese", - "encoding-index-korean", - "encoding-index-simpchinese", - "encoding-index-singlebyte", - "encoding-index-tradchinese", -] - -[[package]] -name = "encoding-index-japanese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-korean" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-simpchinese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-singlebyte" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-tradchinese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding_index_tests" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" - -[[package]] -name = "error-chain" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" -dependencies = [ - "version_check 0.9.2", -] - -[[package]] -name = "fake-simd" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" - -[[package]] -name = "flate2" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c90b0fc46cf89d227cc78b40e494ff81287a92dd07631e5af0d06fe3cf885e" -dependencies = [ - "cfg-if", - "crc32fast", - "libc", - "miniz_oxide", -] - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "fomat-macros" -version = "0.3.1" -source = "git+https://github.com/krdln/fomat-macros#7e790d5cf205f05ed8c5ce2c81f4eb39de68b457" - -[[package]] -name = "generator" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add72f17bb81521258fcc8a7a3245b1e184e916bfbe34f0ea89558f440df5c68" -dependencies = [ - "cc", - "libc", - "log", - "rustc_version", - "winapi", -] - -[[package]] -name = "generic-array" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec" -dependencies = [ - "typenum", -] - -[[package]] -name = "getopts" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "getrandom" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "git2" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11e4b2082980e751c4bf4273e9cbb4a02c655729c8ee8a79f66cad03c8f4d31e" -dependencies = [ - "bitflags", - "libc", - "libgit2-sys", - "log", - "url 2.1.1", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "globset" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ad1da430bd7281dde2576f44c84cc3f0f7b475e7202cd503042dff01a8c8120" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "globwalk" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "178270263374052c40502e9f607134947de75302c1348d1a0e31db67c1691446" -dependencies = [ - "bitflags", - "ignore", - "walkdir", -] - -[[package]] -name = "half" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" - -[[package]] -name = "handlebars" -version = "3.2.2-alpha.0" -source = "git+https://github.com/sunng87/handlebars-rust#5d9710c16218967026f1c1b44ac95f8d8063d4ea" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - -[[package]] -name = "hermit-abi" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9586eedd4ce6b3c498bc3b4dd92fc9f11166aa908a914071953768066c67909" -dependencies = [ - "libc", -] - -[[package]] -name = "home" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" -dependencies = [ - "winapi", -] - -[[package]] -name = "horrorshow" -version = "0.8.3" -source = "git+https://github.com/Stebalien/horrorshow-rs#36c6e95f62ed2c7eef8174a9a3df4d6d87661cf4" - -[[package]] -name = "humansize" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6cab2627acfc432780848602f3f558f7e9dd427352224b0d9324025796d2a5e" - -[[package]] -name = "idna" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "ignore" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22dcbf2a4a289528dbef21686354904e1c694ac642610a9bff9e7df730d9ec72" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "indexmap" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c398b2b113b55809ceb9ee3e753fcbac793f1956663f3c36549c1346015c2afe" -dependencies = [ - "autocfg", -] - -[[package]] -name = "itertools" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" - -[[package]] -name = "itoap" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e804a5759b475f44377998918a7e3be9da3767056f5e77751ef7803893db0e9" - -[[package]] -name = "jobserver" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" -dependencies = [ - "libc", -] - -[[package]] -name = "js-sys" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4b9172132a62451e56142bff9afc91c8e4a4500aa5b847da36815b63bfda916" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kstring" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbc30beb80d56ddf6346e935c7abcba96329ee5c5a4cde8984a4e6b6f18b58e" -dependencies = [ - "serde", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "lazycell" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" - -[[package]] -name = "lexical-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" -dependencies = [ - "arrayvec", - "bitflags", - "cfg-if", - "ryu", - "static_assertions", -] - -[[package]] -name = "libc" -version = "0.2.71" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49" - -[[package]] -name = "libgit2-sys" -version = "0.12.7+1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd07968649bcb7b9351ecfde53ca4d27673cccfdf57c84255ec18710f3153e0" -dependencies = [ - "cc", - "libc", - "libz-sys", - "pkg-config", -] - -[[package]] -name = "libz-sys" -version = "1.0.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb5e43362e38e2bca2fd5f5134c4d4564a23a5c28e9b95411652021a8675ebe" -dependencies = [ - "cc", - "libc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "line-wrap" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" - -[[package]] -name = "liquid" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7cf7f28965f50ff06e2e9f26162f6d944b71f976506a7a01a6308ddebd36155" -dependencies = [ - "chrono", - "deunicode 1.1.1", - "doc-comment", - "itertools 0.8.2", - "lazy_static", - "liquid-compiler", - "liquid-derive 0.19.0", - "liquid-error", - "liquid-interpreter", - "liquid-value", - "regex", - "serde", - "unicode-segmentation", - "url 1.7.2", -] - -[[package]] -name = "liquid" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b7cd741bf1a6c01bfdf697ba13f67e2c8e152920af25596763bb0dbcd6215" -dependencies = [ - "doc-comment", - "kstring", - "liquid-core", - "liquid-derive 0.20.1", - "liquid-lib", - "serde", -] - -[[package]] -name = "liquid-compiler" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd195c00674a2dc811b07969358c97c0639db4a73bc61514db48609d110356f" -dependencies = [ - "itertools 0.8.2", - "liquid-error", - "liquid-interpreter", - "liquid-value", - "pest", - "pest_derive", -] - -[[package]] -name = "liquid-core" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc58422728185d54cd044bba4d45a2ef2a7111a421f84d344f65629949de4f1" -dependencies = [ - "anymap", - "chrono", - "itertools 0.9.0", - "kstring", - "liquid-derive 0.20.1", - "num-traits", - "pest", - "pest_derive", - "serde", -] - -[[package]] -name = "liquid-derive" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0faadd0dd1a7cf38390316c36a9a741949462750f9833b794ac6d7de145218" -dependencies = [ - "liquid-compiler", - "liquid-error", - "liquid-interpreter", - "liquid-value", - "proc-macro2 0.4.30", - "proc-quote 0.2.2", - "syn 0.15.44", -] - -[[package]] -name = "liquid-derive" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfef35f37f019e5dfc550517045078317f5d37afa64cbf246ecde616a7091cb0" -dependencies = [ - "proc-macro2 1.0.18", - "proc-quote 0.3.2", - "syn 1.0.33", -] - -[[package]] -name = "liquid-error" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5c0851812322e87dcf67c2d7e520c3efd8651bd44eb8d0c0246e6dfb94d481" - -[[package]] -name = "liquid-interpreter" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "998e0411b8cb6210bb0729ccbb15abd2a1c8ef7e318c97511ae5a741c817c63e" -dependencies = [ - "anymap", - "itertools 0.8.2", - "liquid-error", - "liquid-value", -] - -[[package]] -name = "liquid-lib" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c4aa47dc08fd8c6c8aea70a0da2a98c0f0416d49e8b03c5c46354ef559bee3c" -dependencies = [ - "chrono", - "itertools 0.9.0", - "kstring", - "liquid-core", - "once_cell", - "percent-encoding 2.1.0", - "regex", - "unicode-segmentation", -] - -[[package]] -name = "liquid-value" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f56016187fb289186fccf44a9ae840f7b9ba35a04fd611e591aed2a1f53c265" -dependencies = [ - "chrono", - "itertools 0.8.2", - "liquid-error", - "num-traits", - "serde", -] - -[[package]] -name = "log" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "logos" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91c49573597a5d6c094f9031617bb1fed15c0db68c81e6546d313414ce107e4" -dependencies = [ - "logos-derive", -] - -[[package]] -name = "logos-derive" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "797b1f8a0571b331c1b47e7db245af3dc634838da7a92b3bef4e30376ae1c347" -dependencies = [ - "beef", - "fnv", - "proc-macro2 1.0.18", - "quote 1.0.7", - "regex-syntax", - "syn 1.0.33", - "utf8-ranges", -] - -[[package]] -name = "loom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ecc775857611e1df29abba5c41355cdf540e7e9d4acfdf0f355eefee82330b7" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup" -version = "0.4.1" -source = "git+https://github.com/utkarshkukreti/markup.rs#2699be6bfc4204da29b29a4e5dada1c961e98b0a" -dependencies = [ - "markup-proc-macro", -] - -[[package]] -name = "markup-proc-macro" -version = "0.4.1" -source = "git+https://github.com/utkarshkukreti/markup.rs#2699be6bfc4204da29b29a4e5dada1c961e98b0a" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "matches" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" - -[[package]] -name = "maud" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e51ec55a4a151ecd3e05a66e591541b9a137e1b43f265cca028b12d421c71d" -dependencies = [ - "maud_htmlescape", - "maud_macros", -] - -[[package]] -name = "maud_htmlescape" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0fb85bccffc42302ad1e1ed8679f6a39d1317f775a37fbc3f79bdfbe054bfb7" - -[[package]] -name = "maud_macros" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ae0fd1d7057a6ad57caf8f85257fcae575f70ecbaee5e7d7401f3c033ad931" -dependencies = [ - "matches", - "maud_htmlescape", - "syn 0.15.44", -] - -[[package]] -name = "maybe-uninit" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" - -[[package]] -name = "md5" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" - -[[package]] -name = "memchr" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" - -[[package]] -name = "memoffset" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" -dependencies = [ - "autocfg", -] - -[[package]] -name = "miniz_oxide" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" -dependencies = [ - "adler", -] - -[[package]] -name = "nom" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" -dependencies = [ - "memchr", - "version_check 0.1.5", -] - -[[package]] -name = "nom" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" -dependencies = [ - "lexical-core", - "memchr", - "version_check 0.9.2", -] - -[[package]] -name = "num-integer" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" - -[[package]] -name = "onig" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd91ccd8a02fce2f7e8a86655aec67bc6c171e6f8e704118a0e8c4b866a05a8a" -dependencies = [ - "bitflags", - "lazy_static", - "libc", - "onig_sys", -] - -[[package]] -name = "onig_sys" -version = "69.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3814583fad89f3c60ae0701d80e87e1fd3028741723deda72d0d4a0ecf0cb0db" -dependencies = [ - "cc", - "pkg-config", -] - -[[package]] -name = "oorandom" -version = "11.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a170cebd8021a008ea92e4db85a72f80b35df514ec664b296fdcbb654eac0b2c" - -[[package]] -name = "opaque-debug" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" - -[[package]] -name = "parse-zoneinfo" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" -dependencies = [ - "regex", -] - -[[package]] -name = "path_abs" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb6b8e6dede0bf94e9300e669f335ba92d5fc9fc8be7f4b1ca8a05206489388c" -dependencies = [ - "std_prelude", -] - -[[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pest" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" -dependencies = [ - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "pest_meta" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" -dependencies = [ - "maplit", - "pest", - "sha-1", -] - -[[package]] -name = "pkg-config" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" - -[[package]] -name = "plist" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b336d94e8e4ce29bf15bba393164629764744c567e8ad306cc1fdd0119967fd" -dependencies = [ - "base64 0.12.3", - "chrono", - "indexmap", - "line-wrap", - "serde", - "xml-rs", -] - -[[package]] -name = "plotters" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d1685fbe7beba33de0330629da9d955ac75bd54f33d7b79f9a895590124f6bb" -dependencies = [ - "js-sys", - "num-traits", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" - -[[package]] -name = "proc-macro-hack" -version = "0.5.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e0456befd48169b9f13ef0f0ad46d492cf9d2dbb918bcf38e01eed4ce3ec5e4" - -[[package]] -name = "proc-macro2" -version = "0.4.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -dependencies = [ - "unicode-xid 0.1.0", -] - -[[package]] -name = "proc-macro2" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "beae6331a816b1f65d04c45b078fd8e6c93e8071771f41b8163255bbd8d7c8fa" -dependencies = [ - "unicode-xid 0.2.1", -] - -[[package]] -name = "proc-quote" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa612543f23fda013e1e6ce30b5285a9d313c6e582e57b4ceca74eb5b85685b5" -dependencies = [ - "proc-macro-hack", - "proc-macro2 0.4.30", - "proc-quote-impl 0.2.2", - "quote 0.6.13", - "syn 0.15.44", -] - -[[package]] -name = "proc-quote" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea4226882439d07839be9c7f683e13d6d69d9c2fe960d61f637d1e2fa4c081" -dependencies = [ - "proc-macro-hack", - "proc-macro2 1.0.18", - "proc-quote-impl 0.3.2", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "proc-quote-impl" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f785f0f8cd00b7945efc3f3bdf8205eb06af5aacec598d83e67f41dc8d101fda" -dependencies = [ - "proc-macro-hack", - "proc-macro2 0.4.30", - "quote 0.6.13", -] - -[[package]] -name = "proc-quote-impl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb3ec628b063cdbcf316e06a8b8c1a541d28fa6c0a8eacd2bfb2b7f49e88aa0" -dependencies = [ - "proc-macro-hack", - "proc-macro2 1.0.18", - "quote 1.0.7", -] - -[[package]] -name = "pulldown-cmark" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e142c3b8f49d2200605ee6ba0b1d757310e9e7a72afe78c36ee2ef67300ee00" -dependencies = [ - "bitflags", - "getopts", - "memchr", - "unicase", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -dependencies = [ - "proc-macro2 0.4.30", -] - -[[package]] -name = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2 1.0.18", -] - -[[package]] -name = "ramhorns" -version = "0.9.4" -source = "git+https://github.com/maciejhirsz/ramhorns#49af427194beefeb83075f82be157771e3eb4cc8" -dependencies = [ - "ahash", - "arrayvec", - "beef", - "fnv", - "logos", - "pulldown-cmark", - "ramhorns-derive", -] - -[[package]] -name = "ramhorns-derive" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924203f57d2674133836b9ff263cebd35fcb9ca396c1c1c7190a5c76a927446e" -dependencies = [ - "fnv", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom", - "libc", - "rand_chacha", - "rand_core", - "rand_hc", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core", -] - -[[package]] -name = "rayon" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" -dependencies = [ - "crossbeam-deque", - "crossbeam-queue", - "crossbeam-utils", - "lazy_static", - "num_cpus", -] - -[[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" - -[[package]] -name = "redox_users" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" -dependencies = [ - "getrandom", - "redox_syscall", - "rust-argon2", -] - -[[package]] -name = "regex" -version = "1.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3780fcf44b193bc4d09f36d2a3c87b251da4a046c87795a0d35f4f927ad8e6" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", - "thread_local", -] - -[[package]] -name = "regex-automata" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" -dependencies = [ - "byteorder", -] - -[[package]] -name = "regex-syntax" -version = "0.6.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26412eb97c6b088a6997e05f69403a802a92d520de2f8e63c2b65f9e0f47c4e8" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "ructe" -version = "0.11.5-PRE" -source = "git+https://github.com/kaj/ructe#d93df0a07b5ef297f5255501a9ca7f448ad8b7b8" -dependencies = [ - "base64 0.12.3", - "bytecount", - "itertools 0.9.0", - "md5", - "nom 5.1.2", -] - -[[package]] -name = "rust-argon2" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" -dependencies = [ - "base64 0.11.0", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] -name = "safemem" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" - -[[package]] -name = "sailfish" -version = "0.2.1" -dependencies = [ - "itoap", - "ryu", - "version_check 0.9.2", -] - -[[package]] -name = "sailfish-compiler" -version = "0.2.1" -dependencies = [ - "home", - "memchr", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "yaml-rust", -] - -[[package]] -name = "sailfish-macros" -version = "0.2.1" -dependencies = [ - "proc-macro2 1.0.18", - "sailfish-compiler", -] - -[[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 = "scoped-tls" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "332ffa32bf586782a3efaeb58f127980944bbc8c4d6913a86107ac2a5ab24b28" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_cbor" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622" -dependencies = [ - "half", - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "serde_json" -version = "1.0.56" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3433e879a558dde8b5e8feb2a04899cf34fdde1fafb894687e52105fc1162ac3" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_yaml" -version = "0.8.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae3e2dd40a7cdc18ca80db804b7f461a39bb721160a85c9a1fa30134bf3c02a5" -dependencies = [ - "dtoa", - "linked-hash-map", - "serde", - "yaml-rust", -] - -[[package]] -name = "sha-1" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" -dependencies = [ - "block-buffer", - "digest", - "fake-simd", - "opaque-debug", -] - -[[package]] -name = "shell-words" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6fa3938c99da4914afedd13bf3d79bcb6c277d1b2c398d23257a304d9e1b074" - -[[package]] -name = "slug" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" -dependencies = [ - "deunicode 0.4.3", -] - -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] -name = "std_prelude" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe" - -[[package]] -name = "strsim" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" - -[[package]] -name = "syn" -version = "0.15.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", -] - -[[package]] -name = "syn" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "unicode-xid 0.2.1", -] - -[[package]] -name = "syntect" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b43a6ca1829ccb0c933b615c9ea83ffc8793ae240cecbd15119b13d741161d" -dependencies = [ - "bincode", - "bitflags", - "flate2", - "fnv", - "lazy_static", - "lazycell", - "onig", - "plist", - "regex-syntax", - "serde", - "serde_derive", - "serde_json", - "walkdir", - "yaml-rust", -] - -[[package]] -name = "tempfile" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" -dependencies = [ - "cfg-if", - "libc", - "rand", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "tera" -version = "1.3.1" -source = "git+https://github.com/Keats/tera#5dc12afc4e0e506183898fc56d3bdc9ce6a0b6d7" -dependencies = [ - "chrono", - "chrono-tz", - "globwalk", - "humansize", - "lazy_static", - "percent-encoding 2.1.0", - "pest", - "pest_derive", - "rand", - "regex", - "serde", - "serde_json", - "slug", - "unic-segment", -] - -[[package]] -name = "term_size" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "terminal_size" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8038f95fc7a6f351163f4b964af631bd26c9e828f7db085f2a84aca56f70d13b" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "termios" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2" -dependencies = [ - "libc", -] - -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "term_size", - "unicode-width", -] - -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "time" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "tinytemplate" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3dc76004a03cec1c5932bca4cdc2e39aaa798e3f82363dd94f9adf6098c12f" -dependencies = [ - "serde", - "serde_json", -] - -[[package]] -name = "tinyvec" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" - -[[package]] -name = "toml" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" -dependencies = [ - "serde", -] - -[[package]] -name = "toolchain_find" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e458af37ead6107144c2e3bb892f605ddfad20251f12143cda8b9c9072b1ca45" -dependencies = [ - "dirs 1.0.5", - "lazy_static", - "regex", - "semver", - "walkdir", -] - -[[package]] -name = "typenum" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" - -[[package]] -name = "ucd-trie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" - -[[package]] -name = "unic-char-property" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - -[[package]] -name = "unic-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" -dependencies = [ - "unic-ucd-segment", -] - -[[package]] -name = "unic-ucd-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", -] - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check 0.9.2", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" -dependencies = [ - "matches", -] - -[[package]] -name = "unicode-normalization" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb19cf769fa8c6a80a162df694621ebeb4dafb606470b2b2fce0be40a98a977" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-segmentation" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" - -[[package]] -name = "unicode-width" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "url" -version = "1.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" -dependencies = [ - "idna 0.1.5", - "matches", - "percent-encoding 1.0.1", -] - -[[package]] -name = "url" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" -dependencies = [ - "idna 0.2.0", - "matches", - "percent-encoding 2.1.0", -] - -[[package]] -name = "utf8-ranges" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ae116fef2b7fea257ed6440d3cfcff7f190865f170cdad00bb6465bf18ecba" - -[[package]] -name = "v_escape" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32189098aacb5820b08c8cff163c982ff72e88ebd04b6b31944084f57463b774" -dependencies = [ - "bytes", - "v_escape_derive", -] - -[[package]] -name = "v_escape" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66158ce426982197fd44266d68125fd4000f1d42f5ee33ef02b500b4b6b0024" -dependencies = [ - "buf-min", - "v_escape_derive", -] - -[[package]] -name = "v_escape_derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cae7cffca0b1f9af9b20610f6fdeee9ffcce61417b5ad186a5d482dc904e24cd" -dependencies = [ - "nom 4.2.3", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", -] - -[[package]] -name = "v_eval" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd8b599d797eb038d0dde9a3860aacb6bbba3bffa4ac64f807c8673820cc9d9" -dependencies = [ - "regex", - "syn 1.0.33", -] - -[[package]] -name = "v_htmlescape" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37981da7d2bd82edc21de370f4d7b010360c8590f70c9f76f5df20e780dc49f2" -dependencies = [ - "cfg-if", - "v_escape 0.11.3", -] - -[[package]] -name = "v_htmlescape" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fd25529cb2f78527b5ee507bcfb357b26d057b5e480853c26d49a4ead5c629" -dependencies = [ - "cfg-if", - "v_escape 0.12.0", -] - -[[package]] -name = "vcpkg" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" - -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - -[[package]] -name = "version_check" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" - -[[package]] -name = "version_check" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" - -[[package]] -name = "walkdir" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - -[[package]] -name = "wasm-bindgen" -version = "0.2.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a634620115e4a229108b71bde263bb4220c483b3f07f5ba514ee8d15064c4c2" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e53963b583d18a5aa3aaae4b4c1cb535218246131ba22a71f05b518098571df" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fcfd5ef6eec85623b4c6e844293d4516470d8f19cd72d0d12246017eb9060b8" -dependencies = [ - "quote 1.0.7", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9adff9ee0e94b926ca81b57f57f86d5545cdcb1d259e21ec9bdd95b901754c75" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f7b90ea6c632dd06fd765d44542e234d5e63d9bb917ecd64d79778a13bd79ae" - -[[package]] -name = "web-sys" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863539788676619aac1a23e2df3655e96b32b0e05eb72ca34ba045ad573c625d" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wild" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "035793abb854745033f01a07647a79831eba29ec0be377205f2a25b0aa830020" -dependencies = [ - "glob", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "xml-rs" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a" - -[[package]] -name = "yaml-rust" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f0c922f1a334134dc2f7a8b67dc5d25f0735263feec974345ff706bcf20b0d" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "yansi-term" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1" -dependencies = [ - "winapi", -] - -[[package]] -name = "yarte" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "buf-min", - "yarte_derive", - "yarte_helpers", -] - -[[package]] -name = "yarte_codegen" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "yarte_helpers", - "yarte_hir", -] - -[[package]] -name = "yarte_derive" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "bat", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "tempfile", - "toolchain_find", - "yarte_codegen", - "yarte_helpers", - "yarte_hir", - "yarte_parser", -] - -[[package]] -name = "yarte_helpers" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "buf-min", - "dtoa", - "itoa", - "ryu", - "serde", - "toml", - "v_htmlescape 0.10.0", -] - -[[package]] -name = "yarte_hir" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "derive_more", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "v_eval", - "v_htmlescape 0.10.0", - "yarte_helpers", - "yarte_parser", -] - -[[package]] -name = "yarte_parser" -version = "0.12.0" -source = "git+https://github.com/botika/yarte#a39f49d5e2f7826b1be492bca56cd79342369fe3" -dependencies = [ - "annotate-snippets", - "derive_more", - "proc-macro2 1.0.18", - "quote 1.0.7", - "syn 1.0.33", - "unicode-xid 0.2.1", - "yarte_helpers", -] diff --git a/benches/Cargo.toml b/benches/Cargo.toml deleted file mode 100644 index c4da44e..0000000 --- a/benches/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "benches" -version = "0.2.3" -authors = ["Dirkjan Ochtman ", "Ryohei Machida "] -build = "src/build.rs" -edition = "2018" -publish = false - -[dependencies] -askama = { git = "https://github.com/djc/askama" } -criterion = { version = "0.3", features = ["real_blackbox"] } -fomat-macros = { git = "https://github.com/krdln/fomat-macros" } -handlebars = { git = "https://github.com/sunng87/handlebars-rust" } -horrorshow = { git = "https://github.com/Stebalien/horrorshow-rs" } -liquid = "0.19.0" -markup = { git = "https://github.com/utkarshkukreti/markup.rs" } -maud = "0.21.0" -ramhorns = { git = "https://github.com/maciejhirsz/ramhorns" } -sailfish = { path = "../sailfish" } -sailfish-macros = { path = "../sailfish-macros" } -serde = "1" -serde_derive = "1" -serde_json = "1" -serde_yaml = "0.8" -tera = { git = "https://github.com/Keats/tera" } -v_htmlescape = "0.9.1" -yarte = { git = "https://github.com/botika/yarte", features = ["bytes-buf", "fixed"] } -bytes = "0.5.5" - -[build-dependencies] -ructe = { git = "https://github.com/kaj/ructe" } - -[[bench]] -name = "all" -harness = false diff --git a/benches/README.md b/benches/README.md index 842f1cc..429aa48 100644 --- a/benches/README.md +++ b/benches/README.md @@ -1,48 +1 @@ -# Rust template engine benchmarks - -Performance comparison of template engines for Rust based on [criterion](https://github.com/bheisler/criterion.rs) crate - -## crates - -- [askama](https://github.com/djc/askama): Type-safe, compiled Jinja-like templates for Rust -- [fomat](https://github.com/krdln/fomat-macros): Alternative syntax for printing macros in Rust -- [handlebars](https://github.com/sunng87/handlebars-rust): Handlebars templating language implemented in Rust and for Rust. -- [horrorshow](https://github.com/Stebalien/horrorshow-rs): A macro-based html builder for rust -- [liquid](https://github.com/cobalt-org/liquid-rust): the liquid templating language for Rust -- [markup](https://github.com/utkarshkukreti/markup.rs): A blazing fast, type-safe template engine for Rust. -- [maud](https://github.com/lambda-fairy/maud): Compile-time HTML templates for Rust -- [ramhorns](https://github.com/maciejhirsz/ramhorns): Fast Mustache template engine implementation in pure Rust -- [ructe](https://github.com/kaj/ructe): Rust Compiled Templates with static-file handling -- [std::write!](https://doc.rust-lang.org/std/macro.write.html): the std library `write!` macro -- [tera](https://github.com/Keats/tera): A template engine for Rust based on Jinja2/Django -- [yarte](https://github.com/botika/yarte): Yet Another Rust Template Engine, is the fastest template engine -- [sailfish](https://github.com/Kogia-sima/sailfish): Simple, small, and extremely fast template engine for Rust - -## Running the benchmarks - -```console -$ cargo bench -``` - -## Environment - -- OS: Ubuntu 20.04 LTS -- CPU Model Name: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz -- BogoMIPS: 3600.00 - -## Results - -- Big table - -![Big table](./bigtable.png) - -- Teams - -![Teams](./teams.png) - -## License - -Copyright (c) 2020 Dirkjan Ochtman and Ryohei Machida - -This benchmark code is distributed under the special permission granted by [Dirkjan Ochtman](https://github.com/djc) (See [this issue](https://github.com/djc/template-benchmarks-rs/issues/26)). -**You cannot modify or redistribute the source code without an explicit permission**. +benchmark programs were removed in favor of https://github.com/djc/template-benchmarks-rs diff --git a/benches/benches/all.rs b/benches/benches/all.rs deleted file mode 100644 index d7a6439..0000000 --- a/benches/benches/all.rs +++ /dev/null @@ -1,48 +0,0 @@ -use benches::{ - askama_bench, fomat, handlebars, horrorshow_bench, liquid, markup_bench, maud_bench, - ramhorns, ructe, sailfish, std_write, tera, yarte_bench, yarte_bytes, yarte_fixed, -}; -use criterion::{criterion_group, criterion_main, Criterion}; - -fn big_table(c: &mut Criterion) { - let mut g = c.benchmark_group("Big table"); - g.bench_function("Askama", |b| askama_bench::big_table(b, &100)); - g.bench_function("fomat", |b| fomat::big_table(b, &100)); - g.bench_function("Handlebars", |b| handlebars::big_table(b, &100)); - g.bench_function("Horrorshow", |b| horrorshow_bench::big_table(b, &100)); - g.bench_function("Liquid", |b| liquid::big_table(b, &100)); - g.bench_function("Markup", |b| markup_bench::big_table(b, &100)); - g.bench_function("Maud", |b| maud_bench::big_table(b, &100)); - g.bench_function("Ramhorns", |b| ramhorns::big_table(b, &100)); - g.bench_function("Ructe", |b| ructe::big_table(b, &100)); - g.bench_function("Sailfish", |b| sailfish::big_table(b, &100)); - g.bench_function("Tera", |b| tera::big_table(b, &100)); - g.bench_function("Yarte", |b| yarte_bench::big_table(b, &100)); - g.bench_function("Yarte Send", |b| yarte_bytes::big_table(b, &100)); - g.bench_function("Yarte ?Send", |b| yarte_fixed::big_table(b, &100)); - g.bench_function("write", |b| std_write::big_table(b, &100)); - g.finish(); -} - -fn teams(c: &mut Criterion) { - let mut g = c.benchmark_group("Teams"); - g.bench_function("Askama", |b| askama_bench::teams(b, &0)); - g.bench_function("fomat", |b| fomat::teams(b, &0)); - g.bench_function("Handlebars", |b| handlebars::teams(b, &0)); - g.bench_function("Horrorshow", |b| horrorshow_bench::teams(b, &0)); - g.bench_function("Liquid", |b| liquid::teams(b, &0)); - g.bench_function("Markup", |b| markup_bench::teams(b, &0)); - g.bench_function("Maud", |b| maud_bench::teams(b, &0)); - g.bench_function("Ramhorns", |b| ramhorns::teams(b)); - g.bench_function("Ructe", |b| ructe::teams(b, &0)); - g.bench_function("Sailfish", |b| sailfish::teams(b)); - g.bench_function("Tera", |b| tera::teams(b, &0)); - g.bench_function("Yarte", |b| yarte_bench::teams(b)); - g.bench_function("Yarte Send", |b| yarte_bytes::teams(b)); - g.bench_function("Yarte ?Send", |b| yarte_fixed::teams(b)); - g.bench_function("write", |b| std_write::teams(b, &0)); - g.finish(); -} - -criterion_group!(benches, big_table, teams); -criterion_main!(benches); diff --git a/benches/bigtable.png b/benches/bigtable.png deleted file mode 100644 index f7d76dc..0000000 Binary files a/benches/bigtable.png and /dev/null differ diff --git a/benches/src/askama_bench.rs b/benches/src/askama_bench.rs deleted file mode 100644 index fd51f81..0000000 --- a/benches/src/askama_bench.rs +++ /dev/null @@ -1,58 +0,0 @@ -use askama::Template; -use criterion; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - let ctx = BigTable { table }; - b.iter(|| ctx.render().unwrap()); -} - -#[derive(Template)] -#[template(path = "big-table.html")] -struct BigTable { - table: Vec>, -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| teams.render().unwrap()); -} - -#[derive(Template)] -#[template(path = "teams.html")] -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/build.rs b/benches/src/build.rs deleted file mode 100644 index ade7fb1..0000000 --- a/benches/src/build.rs +++ /dev/null @@ -1,11 +0,0 @@ -use ructe::Ructe; -use std::env; -use std::path::PathBuf; - -fn main() { - let in_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("templates_ructe"); - Ructe::from_env() - .unwrap() - .compile_templates(&in_dir) - .expect("compile templates"); -} diff --git a/benches/src/fomat.rs b/benches/src/fomat.rs deleted file mode 100644 index c1c72df..0000000 --- a/benches/src/fomat.rs +++ /dev/null @@ -1,76 +0,0 @@ -use criterion; -use fomat_macros::fomat; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| { - fomat!( - "\n" - for r1 in &table { - "\n" - for r2 in r1 { "" } - "\n\n" - } - "
"(r2)"
" - ) - }); -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| { - fomat!( -" - - "(teams.year)" - - -

CSL "(teams.year)"

-
    " - for (i,team) in (&teams).teams.iter().enumerate() { - "
  • \n" - " "(team.name)": "(team.score)"\n" - "
  • \n" - } -"\n
- -") - }); -} - -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/handlebars.rs b/benches/src/handlebars.rs deleted file mode 100644 index 26289da..0000000 --- a/benches/src/handlebars.rs +++ /dev/null @@ -1,89 +0,0 @@ -use std::collections::BTreeMap; - -use ::handlebars::{to_json, Handlebars}; -use criterion; -use serde::Serialize; -use serde_json; -use serde_json::value::Value as Json; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - - let ctx = BigTable { table }; - let mut handlebars = Handlebars::new(); - handlebars - .register_template_string("big-table.html", SOURCE) - .unwrap(); - b.iter(|| handlebars.render("big-table.html", &ctx).ok().unwrap()); -} - -#[derive(Serialize)] -struct BigTable { - table: Vec>, -} - -static SOURCE: &'static str = " - {{#each table as |n|}} - {{#each n as |v|}}{{v}}{{/each}} - {{/each}} -"; - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let mut handlebars = Handlebars::new(); - handlebars - .register_template_string("table", TEAMS_TEMPLATE) - .ok() - .expect("Invalid template format"); - - let data = teams_data(); - b.iter(|| handlebars.render("table", &data).ok().unwrap()) -} - -fn teams_data() -> BTreeMap { - let mut data = BTreeMap::new(); - - data.insert("year".to_string(), to_json(&"2015".to_owned())); - - let mut teams = Vec::new(); - - for v in vec![ - ("Jiangsu", 43u16), - ("Beijing", 27u16), - ("Guangzhou", 22u16), - ("Shandong", 12u16), - ] - .iter() - { - let (name, score) = *v; - let mut t = BTreeMap::new(); - t.insert("name".to_string(), to_json(&name)); - t.insert("score".to_string(), to_json(&score)); - teams.push(t) - } - - data.insert("teams".to_string(), to_json(&teams)); - data -} - -static TEAMS_TEMPLATE: &'static str = " - - {{year}} - - -

CSL {{year}}

-
    - {{#each teams}} -
  • - {{name}}: {{score}} -
  • - {{/each}} -
- -"; diff --git a/benches/src/horrorshow_bench.rs b/benches/src/horrorshow_bench.rs deleted file mode 100644 index bfb66b8..0000000 --- a/benches/src/horrorshow_bench.rs +++ /dev/null @@ -1,92 +0,0 @@ -use criterion; -use horrorshow::html; -use horrorshow::prelude::*; -use horrorshow::Error; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| big_table_render(&table).unwrap()); -} - -fn big_table_render(table: &Vec>) -> Result { - let page = html! { - table { - @ for row in table { - tr { - @ for col in row { - td { : col } - } - } - } - } - }; - page.into_string() -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - - b.iter(|| teams_render(&teams).unwrap()); -} - -fn teams_render(teams: &Teams) -> Result { - let page = html! { - html { - head { - title { : teams.year } - } - body { - h1 { : Raw("CSL "); - : teams.year - } - ul { - @ for (idx, team) in teams.teams.iter().enumerate() { - li(class? = if idx == 0 { Some(Raw("champion")) } else { None }) { - b { : &team.name } - : Raw(": "); - : team.score - } - } - } - } - } - }; - page.into_string() -} - -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/lib.rs b/benches/src/lib.rs deleted file mode 100644 index 7cf17ce..0000000 --- a/benches/src/lib.rs +++ /dev/null @@ -1,19 +0,0 @@ -#![feature(proc_macro_hygiene)] - -pub mod askama_bench; -pub mod fomat; -pub mod handlebars; -pub mod horrorshow_bench; -pub mod liquid; -pub mod markup_bench; -pub mod maud_bench; -pub mod ramhorns; -pub mod ructe; -pub mod sailfish; -pub mod std_write; -pub mod tera; -pub mod yarte_bench; -pub mod yarte_bytes; -pub mod yarte_fixed; - -include!(concat!(env!("OUT_DIR"), "/templates.rs")); diff --git a/benches/src/liquid.rs b/benches/src/liquid.rs deleted file mode 100644 index 1687b89..0000000 --- a/benches/src/liquid.rs +++ /dev/null @@ -1,75 +0,0 @@ -use ::liquid::{ - value::{Object, Value}, - ParserBuilder, -}; -use criterion; -use serde_yaml; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(Value::Scalar((i as i32).into())); - } - table.push(Value::Array(inner)); - } - - let template = ParserBuilder::with_liquid() - .build() - .unwrap() - .parse( - " -{% for row in table %} -{% for col in row %}{% endfor %} -{% endfor %} -
{{ col|escape }}
", - ) - .unwrap(); - - let mut globals = Object::new(); - globals.insert("table".into(), Value::Array(table)); - - b.iter(|| template.render(&globals)); -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let parser = ParserBuilder::with_liquid() - .extra_filters() - .build() - .unwrap(); - let template = parser.parse(TEAMS_TEMPLATE).unwrap(); - - let data: Object = self::serde_yaml::from_str(TEAMS_DATA).unwrap(); - - b.iter(|| template.render(&data)); -} - -static TEAMS_TEMPLATE: &'static str = " - - {{year}} - - -

CSL {{year}}

-
    - {% for team in teams %} -
  • - {{team.name}}: {{team.score}} -
  • - {% endfor %} -
- -"; - -static TEAMS_DATA: &'static str = " -year: 2015 -teams: - - name: Jiangsu - score: 43 - - name: Beijing - score: 27 - - name: Guangzhou - score: 22 - - name: Shandong - score: 12 -"; diff --git a/benches/src/markup_bench.rs b/benches/src/markup_bench.rs deleted file mode 100644 index a9c9c23..0000000 --- a/benches/src/markup_bench.rs +++ /dev/null @@ -1,83 +0,0 @@ -use criterion; -use markup::define; - -// TODO: Switch to `markup::define!` when upgrading to Rust 2018. -define! { - BigTable<'a>(table: &'a [Vec]) { - table { - @for r1 in table.iter() { - tr { - @for r2 in r1.iter() { - td { {*r2} } - } - } - } - } - } -} - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| BigTable { table: &table }.to_string()); -} - -pub struct Team { - name: String, - score: u8, -} - -define! { - Teams<'a>(year: u32, teams: &'a [Team]) { - html { - head { - title { {year} } - } - body { - h1 { "CSL " {year} } - ul { - @for (index, team) in teams.iter().enumerate() { - li.{if index == 0 { Some("champion") } else { None }} { - b { {team.name} } ": " {team.score} - } - } - } - } - } - } -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let year = 2015; - let teams = vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ]; - b.iter(|| { - Teams { - year, - teams: &teams, - } - .to_string() - }); -} diff --git a/benches/src/maud_bench.rs b/benches/src/maud_bench.rs deleted file mode 100644 index 464197f..0000000 --- a/benches/src/maud_bench.rs +++ /dev/null @@ -1,92 +0,0 @@ -use criterion; - -use maud::html; - -pub fn big_table(b: &mut criterion::Bencher, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| big_table_render(&table)); -} - -fn big_table_render(table: &Vec>) -> String { - let page = html! { - table { - @for row in table { - tr { - @for col in row { - td { (col) } - } - } - } - } - }; - page.into_string() -} - -pub fn teams(b: &mut criterion::Bencher, _: &usize) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - - b.iter(|| teams_render(&teams)); -} - -fn teams_render(teams: &Teams) -> String { - let page = html! { - html { - head { - title { (teams.year) } - } - body { - h1 { - "CSL " - (teams.year) - } - ul { - @for (idx, team) in teams.teams.iter().enumerate() { - li.champion[idx == 0] { - b { (&team.name) } - ": " - (team.score) - } - } - } - } - } - }; - page.into_string() -} - -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/ramhorns.rs b/benches/src/ramhorns.rs deleted file mode 100644 index d6c907d..0000000 --- a/benches/src/ramhorns.rs +++ /dev/null @@ -1,89 +0,0 @@ -use ramhorns::{Template, Content}; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - let tpl = Template::new(SOURCE).unwrap(); - let ctx = BigTable { table }; - b.iter(|| { - tpl.render(&ctx) - }); -} - -#[derive(Content)] -struct BigTable { - table: Vec>, -} - -static SOURCE: &'static str = " - {{#table}} - {{#.}}{{.}}{{/.}} - {{/table}} -"; - -pub fn teams(b: &mut criterion::Bencher<'_>) { - let tpl = Template::new(TEAMS_TEMPLATE).unwrap(); - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - class: "champion".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - class: String::new(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - class: String::new(), - score: 22, - }, - Team { - name: "Shandong".into(), - class: String::new(), - score: 12, - }, - ], - }; - b.iter(|| { - tpl.render(&teams) - }); -} - -#[derive(Content)] -struct Teams { - year: u16, - teams: Vec, -} - -#[derive(Content)] -struct Team { - name: String, - class: String, - score: u8, -} - -static TEAMS_TEMPLATE: &'static str = " - - {{year}} - - -

CSL {{year}}

-
    - {{#teams}} -
  • - {{name}}: {{score}} -
  • - {{/teams}} -
- -"; diff --git a/benches/src/ructe.rs b/benches/src/ructe.rs deleted file mode 100644 index 18ea207..0000000 --- a/benches/src/ructe.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::templates; -use criterion; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| { - let mut buf = Vec::new(); - templates::big_table(&mut buf, &table).unwrap(); - }); -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let year = 2015; - let teams = vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ]; - b.iter(|| { - let mut buf = Vec::new(); - templates::teams(&mut buf, year, &teams).unwrap(); - }); -} - -pub struct Team { - pub name: String, - pub score: u8, -} diff --git a/benches/src/sailfish.rs b/benches/src/sailfish.rs deleted file mode 100644 index 366816f..0000000 --- a/benches/src/sailfish.rs +++ /dev/null @@ -1,73 +0,0 @@ -use sailfish::TemplateOnce; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| { - let ctx = BigTable { table: &table }; - ctx.render_once().unwrap() - }); -} - -pub fn teams(b: &mut criterion::Bencher<'_>) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| { - let teams = TeamsTemplate { - year: teams.year, - teams: &teams.teams, - }; - teams.render_once().unwrap() - }); -} - -#[derive(TemplateOnce)] -#[template(path = "big-table.stpl")] -#[template(rm_whitespace = true)] -struct BigTable<'a> { - table: &'a [Vec], -} - -#[derive(TemplateOnce)] -#[template(path = "teams.stpl")] -#[template(rm_whitespace = true)] -struct TeamsTemplate<'a> { - year: u16, - teams: &'a [Team], -} - -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/std_write.rs b/benches/src/std_write.rs deleted file mode 100644 index bc3b112..0000000 --- a/benches/src/std_write.rs +++ /dev/null @@ -1,97 +0,0 @@ -use std::io::Write; -use v_htmlescape::escape; - -use criterion; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - b.iter(|| { - let mut output = Vec::new(); - write!(&mut output, "").unwrap(); - for r1 in &table { - write!(&mut output, "\n").unwrap(); - for r2 in r1 { - write!(&mut output, "", col = r2).unwrap(); - } - write!(&mut output, "\n").unwrap(); - } - write!(&mut output, "
{col}
").unwrap(); - output - }); -} - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| { - let mut output = Vec::new(); - write!( - &mut output, - " - - {year} - - -

CSL {year}

-
    ", - year = teams.year - ) - .unwrap(); - for (i, team) in (&teams).teams.iter().enumerate() { - let champion = if i != 0 { "" } else { "champion" }; - write!( - &mut output, - "
  • - {name}: {score}", - champion = escape(champion), - name = escape(&team.name), - score = team.score - ) - .unwrap(); - } - write!( - &mut output, - "
- - " - ) - .unwrap(); - output - }); -} - -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/tera.rs b/benches/src/tera.rs deleted file mode 100644 index 7c7c7f1..0000000 --- a/benches/src/tera.rs +++ /dev/null @@ -1,84 +0,0 @@ -use ::tera::{Context, Tera}; -use criterion; -use serde::Serialize; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - - let mut tera = Tera::default(); - tera.add_raw_templates(vec![("big-table.html", BIG_TABLE_TEMPLATE)]) - .unwrap(); - let mut ctx = Context::new(); - ctx.insert("table", &table); - - let _ = tera.render("big-table.html", &ctx).unwrap(); - b.iter(|| tera.render("big-table.html", &ctx)); -} - -#[derive(Serialize)] -struct Team { - name: String, - score: u8, -} - -// Tera doesn't allow `escape` on number values -static BIG_TABLE_TEMPLATE: &'static str = " -{% for row in table %} -{% for col in row %}{% endfor %} -{% endfor %} -
{{ col }}
"; - -pub fn teams(b: &mut criterion::Bencher<'_>, _: &usize) { - let mut tera = Tera::default(); - tera.add_raw_templates(vec![("teams.html", TEAMS_TEMPLATE)]) - .unwrap(); - let mut ctx = Context::new(); - ctx.insert("year", &2015); - ctx.insert( - "teams", - &vec![ - Team { - name: "Jiangsu".into(), - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - ); - - let _ = tera.render("teams.html", &ctx).unwrap(); - b.iter(|| tera.render("teams.html", &ctx)); -} - -static TEAMS_TEMPLATE: &'static str = " - - {{ year }} - - -

CSL {{ year }}

-
    - {% for team in teams %} -
  • - {{team.name}}: {{team.score}} -
  • - {% endfor %} -
- -"; diff --git a/benches/src/yarte_bench.rs b/benches/src/yarte_bench.rs deleted file mode 100644 index 6678268..0000000 --- a/benches/src/yarte_bench.rs +++ /dev/null @@ -1,58 +0,0 @@ -use yarte::Template; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - let ctx = BigTable { table }; - b.iter(|| ctx.call().unwrap()); -} - -#[derive(Template)] -#[template(path = "big-table.hbs")] -struct BigTable { - table: Vec>, -} - -pub fn teams(b: &mut criterion::Bencher<'_>) { - let teams = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| teams.call().unwrap()); -} - -#[derive(Template)] -#[template(path = "teams.hbs")] -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/yarte_bytes.rs b/benches/src/yarte_bytes.rs deleted file mode 100644 index 87bf921..0000000 --- a/benches/src/yarte_bytes.rs +++ /dev/null @@ -1,59 +0,0 @@ -use bytes::BytesMut; -use yarte::TemplateBytes; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - let t = BigTable { table }; - b.iter(|| t.call::(109915)); -} - -#[derive(TemplateBytes)] -#[template(path = "big-table")] -struct BigTable { - table: Vec>, -} - -pub fn teams(b: &mut criterion::Bencher<'_>) { - let t = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| t.call::(239)); -} - -#[derive(TemplateBytes)] -#[template(path = "teams")] -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/src/yarte_fixed.rs b/benches/src/yarte_fixed.rs deleted file mode 100644 index c733c78..0000000 --- a/benches/src/yarte_fixed.rs +++ /dev/null @@ -1,64 +0,0 @@ -use criterion::black_box; -use std::mem::MaybeUninit; -use yarte::TemplateFixed; - -pub fn big_table(b: &mut criterion::Bencher<'_>, size: &usize) { - let mut table = Vec::with_capacity(*size); - for _ in 0..*size { - let mut inner = Vec::with_capacity(*size); - for i in 0..*size { - inner.push(i); - } - table.push(inner); - } - let t = BigTable { table }; - b.iter(|| { - black_box(unsafe { t.call(&mut [MaybeUninit::uninit(); 109915]) }.unwrap()); - }); -} - -#[derive(TemplateFixed)] -#[template(path = "big-table")] -struct BigTable { - table: Vec>, -} - -pub fn teams(b: &mut criterion::Bencher<'_>) { - let t = Teams { - year: 2015, - teams: vec![ - Team { - name: "Jiangsu".into(), - - score: 43, - }, - Team { - name: "Beijing".into(), - score: 27, - }, - Team { - name: "Guangzhou".into(), - score: 22, - }, - Team { - name: "Shandong".into(), - score: 12, - }, - ], - }; - b.iter(|| { - black_box(unsafe { t.call(&mut [MaybeUninit::uninit(); 239]) }.unwrap()); - }); -} - -#[derive(TemplateFixed)] -#[template(path = "teams")] -struct Teams { - year: u16, - teams: Vec, -} - -struct Team { - name: String, - score: u8, -} diff --git a/benches/teams.png b/benches/teams.png deleted file mode 100644 index 7ec8ab0..0000000 Binary files a/benches/teams.png and /dev/null differ diff --git a/benches/templates/big-table.hbs b/benches/templates/big-table.hbs deleted file mode 100644 index 695a071..0000000 --- a/benches/templates/big-table.hbs +++ /dev/null @@ -1 +0,0 @@ -{{#each table}}{{#each this}}{{/each }}{{/each }}
{{ this }}
diff --git a/benches/templates/big-table.html b/benches/templates/big-table.html deleted file mode 100644 index 2fbfce4..0000000 --- a/benches/templates/big-table.html +++ /dev/null @@ -1,5 +0,0 @@ - -{% for row in table %} -{% for col in row %}{% endfor %} -{% endfor %} -
{{ col|escape }}
diff --git a/benches/templates/big-table.stpl b/benches/templates/big-table.stpl deleted file mode 100644 index 52c442f..0000000 --- a/benches/templates/big-table.stpl +++ /dev/null @@ -1,3 +0,0 @@ - - <% for row in table { %><% for col in row { %><% } %><% } %> -
<%= *col %>
diff --git a/benches/templates/teams.hbs b/benches/templates/teams.hbs deleted file mode 100644 index 5bc3f3b..0000000 --- a/benches/templates/teams.hbs +++ /dev/null @@ -1 +0,0 @@ -{{ year }}

CSL {{ year }}

    {{#each teams }}
  • {{ name }}: {{ score }}
  • {{/each }}
diff --git a/benches/templates/teams.html b/benches/templates/teams.html deleted file mode 100644 index cbeaec9..0000000 --- a/benches/templates/teams.html +++ /dev/null @@ -1,15 +0,0 @@ - - - {{ year }} - - -

CSL {{ year }}

-
    - {% for team in teams %} -
  • - {{ team.name }}: {{ team.score }} -
  • - {% endfor %} -
- - diff --git a/benches/templates/teams.stpl b/benches/templates/teams.stpl deleted file mode 100644 index 33cce92..0000000 --- a/benches/templates/teams.stpl +++ /dev/null @@ -1,11 +0,0 @@ - - - <%= year %> - - -

CSL <%= year %>

-
    - <% for (i, team) in teams.iter().enumerate() { %>
  • <%= team.name %>: <%= team.score %>
  • <% } %> -
- - diff --git a/benches/templates_ructe/big_table.rs.html b/benches/templates_ructe/big_table.rs.html deleted file mode 100644 index 99882a2..0000000 --- a/benches/templates_ructe/big_table.rs.html +++ /dev/null @@ -1,11 +0,0 @@ -@(table: &Vec>) - - -@for row in table{ - - @for col in row { - - } - -} -
@col
diff --git a/benches/templates_ructe/teams.rs.html b/benches/templates_ructe/teams.rs.html deleted file mode 100644 index cd544b1..0000000 --- a/benches/templates_ructe/teams.rs.html +++ /dev/null @@ -1,18 +0,0 @@ -@use crate::ructe::Team; -@(year: u16, teams: &Vec) - - - - @year - - -

CSL @year

-
    - @for (i, team) in teams.iter().enumerate(){ -
  • - @team.name: @team.score -
  • - } -
- -