diff --git a/Cargo.lock b/Cargo.lock index 61a97dabe..e20743939 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,20 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "addr2line" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + [[package]] name = "ansi_term" version = "0.11.0" @@ -11,10 +26,11 @@ dependencies = [ [[package]] name = "atty" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ + "hermit-abi", "libc", "winapi", ] @@ -26,41 +42,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" [[package]] -name = "backtrace" -version = "0.3.40" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5140344c85b01f9bbb4d4b7288a8aa4b3287ccef913a14bcc78a1063623598" dependencies = [ - "backtrace-sys", - "cfg-if", + "addr2line", + "cfg-if 1.0.0", "libc", + "miniz_oxide", + "object", "rustc-demangle", ] -[[package]] -name = "backtrace-sys" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "bit-set" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" +checksum = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3" [[package]] name = "bitflags" @@ -70,24 +84,15 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "byteorder" -version = "1.3.2" +version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" - -[[package]] -name = "c2-chacha" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -dependencies = [ - "ppv-lite86", -] +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" [[package]] name = "cc" -version = "1.0.48" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" +checksum = "95752358c8f7552394baf48cd82695b345628ad3f170d607de3ca03b8dacca15" [[package]] name = "cfg-if" @@ -96,22 +101,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "chrono" -version = "0.4.10" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" dependencies = [ + "libc", "num-integer", "num-traits", "serde", "time", + "winapi", ] [[package]] name = "clap" -version = "2.33.0" +version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ "ansi_term", "atty", @@ -133,9 +146,9 @@ dependencies = [ [[package]] name = "failure" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" +checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ "backtrace", "failure_derive", @@ -143,9 +156,9 @@ dependencies = [ [[package]] name = "failure_derive" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" +checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2", "quote", @@ -155,9 +168,9 @@ dependencies = [ [[package]] name = "fnv" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fuchsia-cprng" @@ -167,20 +180,35 @@ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "getrandom" -version = "0.1.13" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" dependencies = [ - "cfg-if", "libc", - "wasi", ] [[package]] name = "itoa" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" [[package]] name = "kv" @@ -203,9 +231,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.66" +version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" [[package]] name = "lmdb-rkv" @@ -231,50 +259,66 @@ dependencies = [ ] [[package]] -name = "num-integer" -version = "0.1.41" +name = "miniz_oxide" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" dependencies = [ - "autocfg", + "adler", + "autocfg 1.0.1", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg 1.0.1", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.10" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" dependencies = [ - "autocfg", + "autocfg 1.0.1", ] [[package]] -name = "pkg-config" -version = "0.3.17" +name = "object" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" [[package]] name = "ppv-lite86" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" [[package]] name = "proc-macro2" -version = "1.0.7" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0319972dcae462681daf4da1adeeaa066e3ebd29c69be96c6abb1259d2ee2bcc" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" dependencies = [ "unicode-xid", ] [[package]] name = "proptest" -version = "0.9.4" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf147e022eacf0c8a054ab864914a7602618adba841d800a9a9868a5237a529f" +checksum = "01c477819b845fe023d33583ebf10c9f62518c8d79a0960ba5c36d6ac8a55a5b" dependencies = [ "bit-set", "bitflags", @@ -292,15 +336,15 @@ dependencies = [ [[package]] name = "quick-error" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.2" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ "proc-macro2", ] @@ -324,7 +368,7 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" dependencies = [ - "autocfg", + "autocfg 0.1.7", "libc", "rand_chacha 0.1.1", "rand_core 0.4.2", @@ -339,13 +383,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ "getrandom", "libc", - "rand_chacha 0.2.1", + "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", ] @@ -356,17 +400,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" dependencies = [ - "autocfg", + "autocfg 0.1.7", "rand_core 0.3.1", ] [[package]] name = "rand_chacha" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "c2-chacha", + "ppv-lite86", "rand_core 0.5.1", ] @@ -452,7 +496,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" dependencies = [ - "autocfg", + "autocfg 0.1.7", "rand_core 0.4.2", ] @@ -476,21 +520,21 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.1.56" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" [[package]] name = "regex-syntax" -version = "0.6.12" +version = "0.6.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" [[package]] name = "remove_dir_all" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ "winapi", ] @@ -507,9 +551,9 @@ dependencies = [ [[package]] name = "rmp-serde" -version = "0.14.0" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a31c0798045f039ace94e0166f76478b3ba83116ec7c9d4bc934c5b13b8df21" +checksum = "4ce7d70c926fe472aed493b902010bccc17fa9f7284145cb8772fd22fdb052d8" dependencies = [ "byteorder", "rmp", @@ -518,9 +562,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.16" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" [[package]] name = "rusty-fork" @@ -536,24 +580,24 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" [[package]] name = "serde" -version = "1.0.104" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.104" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" dependencies = [ "proc-macro2", "quote", @@ -562,9 +606,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.44" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" dependencies = [ "itoa", "ryu", @@ -579,20 +623,24 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.12" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc157159e2a7df58cd67b1cace10b8ed256a404fb0070593f137d8ba6bef4de" +checksum = "443b4178719c5a851e1bde36ce12da21d74a0e60b4d982ec3385a933c812f0f6" dependencies = [ "proc-macro2", "quote", "unicode-xid", ] +[[package]] +name = "sync-server" +version = "0.1.0" + [[package]] name = "synstructure" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" +checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701" dependencies = [ "proc-macro2", "quote", @@ -605,7 +653,6 @@ name = "taskchampion" version = "0.1.0" dependencies = [ "chrono", - "clap", "failure", "kv", "lmdb-rkv", @@ -616,6 +663,15 @@ dependencies = [ "uuid", ] +[[package]] +name = "taskchampion-cli" +version = "0.1.0" +dependencies = [ + "clap", + "taskchampion", + "uuid", +] + [[package]] name = "tempdir" version = "0.3.7" @@ -632,9 +688,9 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" dependencies = [ - "cfg-if", + "cfg-if 0.1.10", "libc", - "rand 0.7.2", + "rand 0.7.3", "redox_syscall", "remove_dir_all", "winapi", @@ -651,18 +707,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.9" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f357d1814b33bc2dc221243f8424104bfe72dbe911d5b71b3816a2dff1c977e" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.9" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb2e25d25307eb8436894f727aba8f65d07adf02e5b35a13cebed48bd282bfef" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" dependencies = [ "proc-macro2", "quote", @@ -671,35 +727,35 @@ dependencies = [ [[package]] name = "time" -version = "0.1.42" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "redox_syscall", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] [[package]] name = "toml" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d1404644c8b12b16bfcffa4322403a91a451584daaaa7c28d3152e6cbc98cf" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" dependencies = [ "serde", ] [[package]] name = "unicode-width" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" [[package]] name = "unicode-xid" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" [[package]] name = "uuid" @@ -707,15 +763,15 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" dependencies = [ - "rand 0.7.2", + "rand 0.7.3", "serde", ] [[package]] name = "vec_map" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "wait-timeout" @@ -728,15 +784,21 @@ dependencies = [ [[package]] name = "wasi" -version = "0.7.0" +version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", diff --git a/Cargo.toml b/Cargo.toml index 8e5c07492..cd6520de1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,7 @@ -[package] -name = "taskchampion" -version = "0.1.0" -authors = ["Dustin J. Mitchell "] -edition = "2018" +[workspace] -[dependencies] -uuid = { version = "0.8.1", features = ["serde", "v4"] } -serde = "1.0.104" -serde_json = "1.0" -chrono = { version = "0.4.10", features = ["serde"] } -failure = {version = "0.1.5", features = ["derive"] } -clap = "~2.33.0" -kv = {version = "0.10.0", features = ["msgpack-value"]} -lmdb-rkv = {version = "0.12.3"} - -[dev-dependencies] -proptest = "0.9.4" -tempdir = "0.3.7" +members = [ + "taskchampion", + "cli", + "sync-server" +] diff --git a/cli/Cargo.toml b/cli/Cargo.toml new file mode 100644 index 000000000..948b05eb7 --- /dev/null +++ b/cli/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "taskchampion-cli" +version = "0.1.0" +authors = ["Dustin J. Mitchell "] +edition = "2018" + +[dependencies] +clap = "~2.33.0" +uuid = { version = "0.8.1", features = ["serde", "v4"] } +taskchampion = { path = "../taskchampion" } diff --git a/src/bin/task.rs b/cli/src/main.rs similarity index 99% rename from src/bin/task.rs rename to cli/src/main.rs index 0362eb83f..058b1c940 100644 --- a/src/bin/task.rs +++ b/cli/src/main.rs @@ -1,4 +1,3 @@ -extern crate clap; use clap::{App, Arg, SubCommand}; use std::path::Path; use taskchampion::{taskstorage, Replica, Status, DB}; diff --git a/sync-server/Cargo.toml b/sync-server/Cargo.toml new file mode 100644 index 000000000..e2df075ed --- /dev/null +++ b/sync-server/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "sync-server" +version = "0.1.0" +authors = ["Dustin J. Mitchell "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/server.rs b/sync-server/src/lib.rs similarity index 100% rename from src/server.rs rename to sync-server/src/lib.rs diff --git a/taskchampion/Cargo.toml b/taskchampion/Cargo.toml new file mode 100644 index 000000000..1f6681454 --- /dev/null +++ b/taskchampion/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "taskchampion" +version = "0.1.0" +authors = ["Dustin J. Mitchell "] +edition = "2018" + +[dependencies] +uuid = { version = "0.8.1", features = ["serde", "v4"] } +serde = "1.0.104" +serde_json = "1.0" +chrono = { version = "0.4.10", features = ["serde"] } +failure = {version = "0.1.5", features = ["derive"] } +kv = {version = "0.10.0", features = ["msgpack-value"]} +lmdb-rkv = {version = "0.12.3"} + +[dev-dependencies] +proptest = "0.9.4" +tempdir = "0.3.7" diff --git a/README.md b/taskchampion/README.md similarity index 100% rename from README.md rename to taskchampion/README.md diff --git a/docs/.gitignore b/taskchampion/docs/.gitignore similarity index 100% rename from docs/.gitignore rename to taskchampion/docs/.gitignore diff --git a/docs/README.md b/taskchampion/docs/README.md similarity index 100% rename from docs/README.md rename to taskchampion/docs/README.md diff --git a/docs/book.toml b/taskchampion/docs/book.toml similarity index 100% rename from docs/book.toml rename to taskchampion/docs/book.toml diff --git a/docs/src/SUMMARY.md b/taskchampion/docs/src/SUMMARY.md similarity index 100% rename from docs/src/SUMMARY.md rename to taskchampion/docs/src/SUMMARY.md diff --git a/docs/src/data-model.md b/taskchampion/docs/src/data-model.md similarity index 100% rename from docs/src/data-model.md rename to taskchampion/docs/src/data-model.md diff --git a/docs/src/installation.md b/taskchampion/docs/src/installation.md similarity index 100% rename from docs/src/installation.md rename to taskchampion/docs/src/installation.md diff --git a/docs/src/plans.md b/taskchampion/docs/src/plans.md similarity index 100% rename from docs/src/plans.md rename to taskchampion/docs/src/plans.md diff --git a/docs/src/storage.md b/taskchampion/docs/src/storage.md similarity index 100% rename from docs/src/storage.md rename to taskchampion/docs/src/storage.md diff --git a/docs/src/sync.md b/taskchampion/docs/src/sync.md similarity index 100% rename from docs/src/sync.md rename to taskchampion/docs/src/sync.md diff --git a/docs/src/taskdb.md b/taskchampion/docs/src/taskdb.md similarity index 100% rename from docs/src/taskdb.md rename to taskchampion/docs/src/taskdb.md diff --git a/docs/src/tasks.md b/taskchampion/docs/src/tasks.md similarity index 100% rename from docs/src/tasks.md rename to taskchampion/docs/src/tasks.md diff --git a/docs/src/usage.md b/taskchampion/docs/src/usage.md similarity index 100% rename from docs/src/usage.md rename to taskchampion/docs/src/usage.md diff --git a/src/errors.rs b/taskchampion/src/errors.rs similarity index 100% rename from src/errors.rs rename to taskchampion/src/errors.rs diff --git a/src/lib.rs b/taskchampion/src/lib.rs similarity index 91% rename from src/lib.rs rename to taskchampion/src/lib.rs index 97b25b9a8..c9a242359 100644 --- a/src/lib.rs +++ b/taskchampion/src/lib.rs @@ -8,14 +8,13 @@ extern crate failure; mod errors; mod operation; mod replica; -mod server; +pub mod server; mod task; mod taskdb; pub mod taskstorage; pub use operation::Operation; pub use replica::Replica; -pub use server::Server; pub use task::Priority; pub use task::Status; pub use task::Task; diff --git a/src/operation.rs b/taskchampion/src/operation.rs similarity index 100% rename from src/operation.rs rename to taskchampion/src/operation.rs diff --git a/src/replica.rs b/taskchampion/src/replica.rs similarity index 100% rename from src/replica.rs rename to taskchampion/src/replica.rs diff --git a/taskchampion/src/server.rs b/taskchampion/src/server.rs new file mode 100644 index 000000000..233838fa6 --- /dev/null +++ b/taskchampion/src/server.rs @@ -0,0 +1,20 @@ +pub type Blob = Vec; + +pub enum VersionAdd { + // OK, version added + Ok, + // Rejected, must be based on the the given version + ExpectedVersion(u64), +} + +/// A value implementing this trait can act as a server against which a replica can sync. +pub trait Server { + /// Get a vector of all versions after `since_version` + fn get_versions(&self, username: &str, since_version: u64) -> Vec; + + /// Add a new version. If the given version number is incorrect, this responds with the + /// appropriate version and expects the caller to try again. + fn add_version(&mut self, username: &str, version: u64, blob: Blob) -> VersionAdd; + + fn add_snapshot(&mut self, username: &str, version: u64, blob: Blob); +} diff --git a/src/task.rs b/taskchampion/src/task.rs similarity index 100% rename from src/task.rs rename to taskchampion/src/task.rs diff --git a/src/taskdb.rs b/taskchampion/src/taskdb.rs similarity index 99% rename from src/taskdb.rs rename to taskchampion/src/taskdb.rs index 33306f359..5850b1571 100644 --- a/src/taskdb.rs +++ b/taskchampion/src/taskdb.rs @@ -170,7 +170,7 @@ impl DB { } /// Sync to the given server, pulling remote changes and pushing local changes. - pub fn sync(&mut self, username: &str, server: &mut Server) -> Fallible<()> { + pub fn sync(&mut self, username: &str, server: &mut dyn Server) -> Fallible<()> { let mut txn = self.storage.txn()?; // retry synchronizing until the server accepts our version (this allows for races between diff --git a/src/taskstorage/inmemory.rs b/taskchampion/src/taskstorage/inmemory.rs similarity index 100% rename from src/taskstorage/inmemory.rs rename to taskchampion/src/taskstorage/inmemory.rs diff --git a/src/taskstorage/kv.rs b/taskchampion/src/taskstorage/kv.rs similarity index 100% rename from src/taskstorage/kv.rs rename to taskchampion/src/taskstorage/kv.rs diff --git a/src/taskstorage/mod.rs b/taskchampion/src/taskstorage/mod.rs similarity index 100% rename from src/taskstorage/mod.rs rename to taskchampion/src/taskstorage/mod.rs diff --git a/tests/data/tdb2-test.data b/taskchampion/tests/data/tdb2-test.data similarity index 100% rename from tests/data/tdb2-test.data rename to taskchampion/tests/data/tdb2-test.data diff --git a/tests/operation_transform_invariant.rs b/taskchampion/tests/operation_transform_invariant.rs similarity index 100% rename from tests/operation_transform_invariant.rs rename to taskchampion/tests/operation_transform_invariant.rs diff --git a/taskchampion/tests/shared/mod.rs b/taskchampion/tests/shared/mod.rs new file mode 100644 index 000000000..8a5a5ee0c --- /dev/null +++ b/taskchampion/tests/shared/mod.rs @@ -0,0 +1,3 @@ +mod testserver; + +pub use testserver::TestServer; diff --git a/taskchampion/tests/shared/testserver.rs b/taskchampion/tests/shared/testserver.rs new file mode 100644 index 000000000..2cb1cde2e --- /dev/null +++ b/taskchampion/tests/shared/testserver.rs @@ -0,0 +1,81 @@ +use std::collections::HashMap; +use taskchampion::server::{Blob, Server, VersionAdd}; + +pub struct TestServer { + users: HashMap, +} + +struct User { + // versions, indexed at v-1 + versions: Vec, + snapshots: HashMap, +} + +impl TestServer { + pub fn new() -> TestServer { + TestServer { + users: HashMap::new(), + } + } + + fn get_user_mut(&mut self, username: &str) -> &mut User { + self.users + .entry(username.to_string()) + .or_insert_with(User::new) + } +} + +impl Server for TestServer { + /// Get a vector of all versions after `since_version` + fn get_versions(&self, username: &str, since_version: u64) -> Vec { + self.users + .get(username) + .map(|user| user.get_versions(since_version)) + .unwrap_or_else(|| vec![]) + } + + /// Add a new version. If the given version number is incorrect, this responds with the + /// appropriate version and expects the caller to try again. + fn add_version(&mut self, username: &str, version: u64, blob: Blob) -> VersionAdd { + self.get_user_mut(username).add_version(version, blob) + } + + fn add_snapshot(&mut self, username: &str, version: u64, blob: Blob) { + self.get_user_mut(username).add_snapshot(version, blob); + } +} + +impl User { + fn new() -> User { + User { + versions: vec![], + snapshots: HashMap::new(), + } + } + + fn get_versions(&self, since_version: u64) -> Vec { + let last_version = self.versions.len(); + if last_version == since_version as usize { + return vec![]; + } + self.versions[since_version as usize..last_version] + .iter() + .map(|r| r.clone()) + .collect::>() + } + + fn add_version(&mut self, version: u64, blob: Blob) -> VersionAdd { + // of by one here: client wants to send version 1 first + let expected_version = self.versions.len() as u64 + 1; + if version != expected_version { + return VersionAdd::ExpectedVersion(expected_version); + } + self.versions.push(blob); + + VersionAdd::Ok + } + + fn add_snapshot(&mut self, version: u64, blob: Blob) { + self.snapshots.insert(version, blob); + } +} diff --git a/tests/sync.rs b/taskchampion/tests/sync.rs similarity index 95% rename from tests/sync.rs rename to taskchampion/tests/sync.rs index fc594bbd3..197708dee 100644 --- a/tests/sync.rs +++ b/taskchampion/tests/sync.rs @@ -1,14 +1,17 @@ use chrono::Utc; -use taskchampion::{taskstorage, Operation, Server, DB}; +use taskchampion::{taskstorage, Operation, DB}; use uuid::Uuid; +mod shared; +use shared::TestServer; + fn newdb() -> DB { DB::new(Box::new(taskstorage::InMemoryStorage::new())) } #[test] fn test_sync() { - let mut server = Server::new(); + let mut server = TestServer::new(); let mut db1 = newdb(); db1.sync("me", &mut server).unwrap(); @@ -68,7 +71,7 @@ fn test_sync() { #[test] fn test_sync_create_delete() { - let mut server = Server::new(); + let mut server = TestServer::new(); let mut db1 = newdb(); db1.sync("me", &mut server).unwrap(); diff --git a/tests/sync_action_sequences.rs b/taskchampion/tests/sync_action_sequences.rs similarity index 94% rename from tests/sync_action_sequences.rs rename to taskchampion/tests/sync_action_sequences.rs index 741988b11..2c94d6dd8 100644 --- a/tests/sync_action_sequences.rs +++ b/taskchampion/tests/sync_action_sequences.rs @@ -1,8 +1,11 @@ use chrono::Utc; use proptest::prelude::*; -use taskchampion::{taskstorage, Operation, Server, DB}; +use taskchampion::{taskstorage, Operation, DB}; use uuid::Uuid; +mod shared; +use shared::TestServer; + fn newdb() -> DB { DB::new(Box::new(taskstorage::InMemoryStorage::new())) } @@ -46,7 +49,7 @@ proptest! { // and delete operations that results in a task existing in one DB but not existing in // another. So, the generated sequences focus on a single task UUID. fn transform_sequences_of_operations(action_sequence in action_sequence_strategy()) { - let mut server = Server::new(); + let mut server = TestServer::new(); let mut dbs = [newdb(), newdb(), newdb()]; for (action, db) in action_sequence {