diff --git a/Cargo.lock b/Cargo.lock index 226797f2b7dcc21cfa3dde0efef02ab890da7709..77fde66fd0ebccd87e4b7e4f64c212e02deec47c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - [[package]] name = "actix-codec" version = "0.3.0" @@ -105,7 +99,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sha-1", + "sha-1 0.9.8", "slab", "time 0.2.27", ] @@ -315,12 +309,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "aliasable" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" - [[package]] name = "ansi_term" version = "0.12.1" @@ -470,27 +458,6 @@ dependencies = [ "wasm-bindgen-futures", ] -[[package]] -name = "async-stream" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" -dependencies = [ - "async-stream-impl", - "futures-core", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "async-task" version = "4.0.3" @@ -570,19 +537,6 @@ dependencies = [ "serde_urlencoded", ] -[[package]] -name = "bae" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b8de67cc41132507eeece2584804efcb15f85ba516e34c944b7667f480397a" -dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "base-x" version = "0.2.8" @@ -595,19 +549,61 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +[[package]] +name = "bigdecimal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1e50562e37200edf7c6c43e54a08e64a5553bfb59d9c297d5572512aa517256" +dependencies = [ + "num-bigint 0.3.3", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[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 0.12.4", +] + [[package]] name = "block-buffer" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array", + "generic-array 0.14.4", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", ] [[package]] @@ -659,6 +655,12 @@ version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + [[package]] name = "byteorder" version = "1.4.3" @@ -846,7 +848,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array", + "generic-array 0.14.4", "subtle", ] @@ -860,6 +862,16 @@ dependencies = [ "syn", ] +[[package]] +name = "dashmap" +version = "4.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +dependencies = [ + "cfg-if 1.0.0", + "num_cpus", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -873,13 +885,22 @@ dependencies = [ "syn", ] +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + [[package]] name = "digest" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array", + "generic-array 0.14.4", ] [[package]] @@ -908,17 +929,14 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - [[package]] name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +dependencies = [ + "serde", +] [[package]] name = "encoding_rs" @@ -947,6 +965,12 @@ version = "2.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + [[package]] name = "fastrand" version = "1.5.0" @@ -1129,6 +1153,15 @@ dependencies = [ "byteorder", ] +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + [[package]] name = "generic-array" version = "0.14.4" @@ -1243,7 +1276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" dependencies = [ "crypto-mac", - "digest", + "digest 0.9.0", ] [[package]] @@ -1257,6 +1290,21 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "html_parser" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58112d7b68ff61447bd22a489d7877a79ee688f6f34d57d3857842776d42dd0c" +dependencies = [ + "pest", + "pest_derive", + "serde", + "serde_derive", + "serde_json", + "structopt", + "thiserror", +] + [[package]] name = "http" version = "0.2.5" @@ -1325,6 +1373,15 @@ dependencies = [ "winreg", ] +[[package]] +name = "ipnetwork" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02c3eaab3ac0ede60ffa41add21970a7df7d91772c03383aac6c2c3d53cc716b" +dependencies = [ + "serde", +] + [[package]] name = "itertools" version = "0.10.3" @@ -1446,6 +1503,12 @@ dependencies = [ "linked-hash-map", ] +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "match_cfg" version = "0.1.0" @@ -1464,9 +1527,9 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" dependencies = [ - "block-buffer", - "digest", - "opaque-debug", + "block-buffer 0.9.0", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] @@ -1670,33 +1733,15 @@ checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" [[package]] name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - -[[package]] -name = "ouroboros" -version = "0.11.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3518a68fc597f6a42f83a31e41c039c3cbaa10fa8bb239c936c235e81cce873f" -dependencies = [ - "aliasable", - "ouroboros_macro", - "stable_deref_trait", -] +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] -name = "ouroboros_macro" -version = "0.11.1" +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e23813b1bcb2d41a838849a2bbae40ae5c03c85ecabf04ba97086f438484714" -dependencies = [ - "Inflector", - "proc-macro-error", - "proc-macro2", - "quote", - "syn", -] +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "parking" @@ -1746,6 +1791,49 @@ 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", + "quote", + "syn", +] + +[[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 0.8.2", +] + [[package]] name = "pin-project" version = "0.4.28" @@ -1874,6 +1962,18 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "py_sql" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406b706c360fcde6e93391e83ef16aed0798a96f08e8f0e174de0681ec0a6060" +dependencies = [ + "dashmap", + "rexpr", + "serde", + "serde_json", +] + [[package]] name = "quick-error" version = "1.2.3" @@ -1970,6 +2070,114 @@ dependencies = [ "rand_core 0.6.3", ] +[[package]] +name = "rbatis" +version = "3.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce45febe5f43f2495d3d55c1342ebadc49444b77a830bcad7599a6481c8686a6" +dependencies = [ + "async-trait", + "chrono", + "futures", + "futures-core", + "hex", + "lazy_static", + "log", + "once_cell", + "rand 0.8.4", + "rbatis-core", + "rbatis-macro-driver", + "rbatis_sql", + "rbson", + "serde", + "uuid 0.8.2", +] + +[[package]] +name = "rbatis-core" +version = "3.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9baa1d636ad53d589680dcc9674fb58829abb42e0b9e694b50ff3da6e2d26395" +dependencies = [ + "base64", + "bigdecimal", + "bit-vec", + "chrono", + "hex", + "ipnetwork", + "lazy_static", + "log", + "py_sql", + "rbson", + "rexpr", + "serde", + "serde_json", + "sqlx-core", + "time 0.2.27", + "uuid 0.8.2", +] + +[[package]] +name = "rbatis-macro-driver" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82273c716eca70f4945cd0485dbc3a525726242ea7fee713ca490f081ca47f86" +dependencies = [ + "html_parser", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "rbatis_sql" +version = "3.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3852b627d81d1e2d8313b024d899190baaf8e75429f5d49e842a0bdac77474c4" +dependencies = [ + "async-trait", + "base64", + "dashmap", + "rbatis_sql_macro", + "rbson", + "serde", +] + +[[package]] +name = "rbatis_sql_macro" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5050d3450a18cb42f377c8881df476fd33e6a65df28309bf8be08995ac8e4935" +dependencies = [ + "async-trait", + "base64", + "html_parser", + "proc-macro2", + "quote", + "syn", + "url", + "xml-rs", +] + +[[package]] +name = "rbson" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88f7c79c3b796113c856d3f1b7ca27c453e1efea1096e9d4fac6dba84d641dbc" +dependencies = [ + "ahash", + "base64", + "chrono", + "hex", + "indexmap", + "lazy_static", + "rand 0.8.4", + "serde", + "serde_bytes", + "serde_json", + "uuid 0.8.2", +] + [[package]] name = "redox_syscall" version = "0.1.57" @@ -2022,6 +2230,17 @@ dependencies = [ "quick-error", ] +[[package]] +name = "rexpr" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4753cc5e42400348f62002a279dd25e135fa46b95d0cac6935c6380deb31feda" +dependencies = [ + "dashmap", + "serde", + "serde_json", +] + [[package]] name = "ring" version = "0.16.20" @@ -2044,7 +2263,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7b0aeddcca1082112a6eeb43bf25fd7820b066aaf6eaef776e19d0a1febe38fe" dependencies = [ "byteorder", - "digest", + "digest 0.9.0", "lazy_static", "num-bigint-dig", "num-integer", @@ -2111,7 +2330,8 @@ dependencies = [ "chrono", "derive_more", "log", - "sea-orm", + "rbatis", + "rbson", "serde", "serde_json", "simple-logging", @@ -2144,89 +2364,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "sea-orm" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f594c2a48a3f2c7c911187c67a39d08f63af932801073737358bef0b5f06576" -dependencies = [ - "async-stream", - "async-trait", - "chrono", - "futures", - "futures-util", - "ouroboros", - "rust_decimal", - "sea-orm-macros", - "sea-query", - "sea-strum", - "serde", - "serde_json", - "sqlx", - "url", - "uuid 0.8.2", -] - -[[package]] -name = "sea-orm-macros" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73786f2ccb8f697d83e80a1ddd3c580ead76dddd068ebb4349b5ab648e625cd2" -dependencies = [ - "bae", - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sea-query" -version = "0.19.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c6353d854a61e47b2691feded408c6ffd07ba9913311f0ff17c889ef2f102f" -dependencies = [ - "chrono", - "rust_decimal", - "sea-query-derive", - "serde_json", - "uuid 0.8.2", -] - -[[package]] -name = "sea-query-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cdc022b4f606353fe5dc85b09713a04e433323b70163e81513b141c6ae6eb5" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", - "thiserror", -] - -[[package]] -name = "sea-strum" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c77c6c6c8b3950fccb65edd5d04985b5377f4c8f669cb9a215553f0369ec001" -dependencies = [ - "sea-strum_macros", -] - -[[package]] -name = "sea-strum_macros" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51c247af6c2c4ffd372fe97e9afa579b4438e4c306c9aa3f11cbf72f1e845180" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "semver" version = "0.9.0" @@ -2257,6 +2394,15 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_bytes" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +dependencies = [ + "serde", +] + [[package]] name = "serde_derive" version = "1.0.132" @@ -2292,17 +2438,29 @@ dependencies = [ "serde", ] +[[package]] +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + [[package]] name = "sha-1" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if 1.0.0", "cpufeatures", - "digest", - "opaque-debug", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] @@ -2317,18 +2475,18 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ - "block-buffer", + "block-buffer 0.9.0", "cfg-if 1.0.0", "cpufeatures", - "digest", - "opaque-debug", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] name = "signal-hook" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35dfd12afb7828318348b8c408383cf5071a086c1d4ab1c0f9840ec92dbb922" +checksum = "647c97df271007dcea485bb74ffdb57f2e683f1306c854f468a0c244badabf2d" dependencies = [ "libc", "signal-hook-registry", @@ -2416,16 +2574,6 @@ dependencies = [ "unicode_categories", ] -[[package]] -name = "sqlx" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7911b0031a0247af40095838002999c7a52fba29d9739e93326e71a5a1bc9d43" -dependencies = [ - "sqlx-core", - "sqlx-macros", -] - [[package]] name = "sqlx-core" version = "0.5.9" @@ -2435,6 +2583,8 @@ dependencies = [ "ahash", "atoi", "base64", + "bigdecimal", + "bit-vec", "bitflags", "byteorder", "bytes 1.1.0", @@ -2443,14 +2593,15 @@ dependencies = [ "crossbeam-channel", "crossbeam-queue", "crossbeam-utils", - "digest", + "digest 0.9.0", "dirs", "either", + "encoding_rs", "futures-channel", "futures-core", "futures-intrusive", "futures-util", - "generic-array", + "generic-array 0.14.4", "hashlink", "hex", "hmac", @@ -2466,18 +2617,20 @@ dependencies = [ "parking_lot", "percent-encoding", "rand 0.8.4", + "regex", "rsa", "rust_decimal", "rustls", "serde", "serde_json", - "sha-1", + "sha-1 0.9.8", "sha2", "smallvec", "sqlformat", "sqlx-rt", "stringprep", "thiserror", + "time 0.2.27", "url", "uuid 0.8.2", "webpki", @@ -2485,26 +2638,6 @@ dependencies = [ "whoami", ] -[[package]] -name = "sqlx-macros" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584866c833511b1a152e87a7ee20dee2739746f60c858b3c5209150bc4b466f5" -dependencies = [ - "dotenv", - "either", - "heck", - "once_cell", - "proc-macro2", - "quote", - "serde_json", - "sha2", - "sqlx-core", - "sqlx-rt", - "syn", - "url", -] - [[package]] name = "sqlx-rt" version = "0.5.9" @@ -2515,12 +2648,6 @@ dependencies = [ "async-std", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "standback" version = "0.2.17" @@ -2722,6 +2849,7 @@ checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" dependencies = [ "const_fn", "libc", + "serde", "standback", "stdweb", "time-macros", @@ -2877,6 +3005,12 @@ version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +[[package]] +name = "ucd-trie" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" + [[package]] name = "unicase" version = "2.6.0" @@ -3219,6 +3353,12 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "xml-rs" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" + [[package]] name = "zeroize" version = "1.3.0" diff --git a/Cargo.toml b/Cargo.toml index 03374cf717e03eb26a9b2b78388898f7e95a93bb..2a4bec116dbeb798d0c3dd7386b05852cd0806a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,4 +25,5 @@ url = "2.2.2" base64 = "^0.13.0" simple-logging = { version = "^2.0.2" } strfmt = "^0.1.6" -sea-orm = { version = "^0.4.2", features = ["runtime-async-std-rustls", "sqlx-all", "sqlx-chrono"] } \ No newline at end of file +rbson = "2.0" +rbatis = { version = "^3.0", default-features = false, features = ["runtime-async-std-rustls", "all-database"] } \ No newline at end of file diff --git a/src/errors.rs b/src/errors.rs index b6f635f35c16b172748ddc60db9fa642527e42cd..398176f11de180c4f73296b88463f73701103762 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -19,7 +19,7 @@ pub enum RustusError { #[error("Unable to serialize object")] UnableToSerialize(#[from] serde_json::Error), #[error("Database error: {0}")] - DatabaseError(#[from] sea_orm::error::DbErr), + DatabaseError(#[from] rbatis::error::Error), #[error("Unable to get file information")] UnableToReadInfo, #[error("Unable to write file {0}")] diff --git a/src/info_storages/db_info_storage.rs b/src/info_storages/db_info_storage.rs index c3c2730eaa62f1ed1b2a4ca55be0a3580689ff6e..58a86371c5f252b1a6141b5247acb3868d504e49 100644 --- a/src/info_storages/db_info_storage.rs +++ b/src/info_storages/db_info_storage.rs @@ -1,24 +1,49 @@ +use std::time::Duration; + use async_trait::async_trait; -use sea_orm::ActiveModelTrait; -use sea_orm::EntityTrait; -use sea_orm::{ConnectOptions, ConnectionTrait, Database, DatabaseConnection, Schema, Set}; +use rbatis::{crud_table, impl_field_name_method}; +use rbatis::crud::CRUD; +use rbatis::db::DBPoolOptions; +use rbatis::executor::Executor; +use rbatis::rbatis::Rbatis; use crate::errors::{RustusError, RustusResult}; -use crate::info_storages::db_model; use crate::info_storages::{FileInfo, InfoStorage}; use crate::RustusConf; +#[crud_table] +struct DbModel { + pub id: String, + pub info: String, +} + +impl TryFrom<&FileInfo> for DbModel { + type Error = RustusError; + + fn try_from(value: &FileInfo) -> Result<Self, Self::Error> { + Ok(DbModel { + id: value.id.clone(), + info: serde_json::to_string(value)?, + }) + } +} + +impl_field_name_method!(DbModel { id, info }); + pub struct DBInfoStorage { - db: DatabaseConnection, + db: Rbatis, } impl DBInfoStorage { pub async fn new(app_conf: RustusConf) -> RustusResult<Self> { - let db = Database::connect(ConnectOptions::new( - app_conf.info_storage_opts.info_db_dsn.unwrap().clone(), - )) - .await - .map_err(RustusError::from)?; + let db = Rbatis::new(); + let mut opts = DBPoolOptions::new(); + opts.connect_timeout = Duration::new(2, 0); + db.link_opt( + app_conf.info_storage_opts.info_db_dsn.unwrap().as_str(), + opts, + ) + .await?; Ok(Self { db }) } } @@ -26,72 +51,51 @@ impl DBInfoStorage { #[async_trait] impl InfoStorage for DBInfoStorage { async fn prepare(&mut self) -> RustusResult<()> { - let builder = self.db.get_database_backend(); - let schema = Schema::new(builder); - let create_statement = builder.build( - schema - .create_table_from_entity(db_model::Entity) - .if_not_exists(), - ); + // let builder = self.db(); self.db - .execute(create_statement) - .await - .map_err(RustusError::from)?; + .exec( + "CREATE TABLE IF NOT EXISTS db_model (id VARCHAR(40) PRIMARY KEY, info TEXT);", + Vec::new(), + ) + .await?; Ok(()) } - async fn set_info(&self, file_info: &FileInfo) -> RustusResult<()> { - let db_model: Option<db_model::Model> = db_model::Entity::find_by_id(file_info.id.clone()) - .one(&self.db) - .await - .map_err(RustusError::from)?; - - let model = db_model::Model::try_from(file_info.clone())?; - - if let Some(db_model) = db_model { - let mut active_model: db_model::ActiveModel = db_model.into(); - active_model.file_info = Set(model.file_info.clone()); - active_model.update(&self.db).await?; + async fn set_info(&self, file_info: &FileInfo, create: bool) -> RustusResult<()> { + let model = DbModel::try_from(file_info)?; + if create { + self.db.save(&model, &[]).await?; } else { - db_model::ActiveModel { - id: Set(model.id.clone()), - file_info: Set(model.file_info.clone()), - } - .insert(&self.db) - .await?; + self.db.update_by_column(DbModel::id(), &model).await?; } - Ok(()) } async fn get_info(&self, file_id: &str) -> RustusResult<FileInfo> { - let model_opt: Option<db_model::Model> = - db_model::Entity::find_by_id(String::from(file_id)) - .one(&self.db) - .await - .map_err(RustusError::from)?; - if let Some(model) = model_opt { - serde_json::from_str(model.file_info.as_str()).map_err(RustusError::from) + let model: Option<DbModel> = self.db.fetch_by_column(DbModel::id(), file_id).await?; + if let Some(info) = model { + serde_json::from_str(info.info.as_str()).map_err(RustusError::from) } else { Err(RustusError::FileNotFound) } } async fn remove_info(&self, file_id: &str) -> RustusResult<()> { - let model_opt: Option<db_model::Model> = - db_model::Entity::find_by_id(String::from(file_id)) - .one(&self.db) - .await - .map_err(RustusError::from)?; - if let Some(model) = model_opt { - let active_model: db_model::ActiveModel = model.into(); - active_model - .delete(&self.db) - .await - .map_err(RustusError::from)?; - Ok(()) - } else { - Err(RustusError::FileNotFound) - } + // let model_opt: Option<db_model::Model> = + // db_model::Entity::find_by_id(String::from(file_id)) + // .one(&self.db) + // .await + // .map_err(RustusError::from)?; + // if let Some(model) = model_opt { + // let active_model: db_model::ActiveModel = model.into(); + // active_model + // .delete(&self.db) + // .await + // .map_err(RustusError::from)?; + // Ok(()) + // } else { + // Err(RustusError::FileNotFound) + // } + todo!() } } diff --git a/src/info_storages/db_model.rs b/src/info_storages/db_model.rs deleted file mode 100644 index 1bcd876ec18d5630862bb43b07e675d2a3589f30..0000000000000000000000000000000000000000 --- a/src/info_storages/db_model.rs +++ /dev/null @@ -1,29 +0,0 @@ -use sea_orm::entity::prelude::*; - -use crate::errors::RustusError; -use crate::info_storages::FileInfo; - -#[derive(Clone, Debug, PartialEq, DeriveEntityModel)] -#[sea_orm(table_name = "file_info")] -pub struct Model { - #[sea_orm(primary_key, auto_increment = false)] - pub id: String, - pub file_info: String, -} - -#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] -pub enum Relation {} - -impl ActiveModelBehavior for ActiveModel {} - -impl TryFrom<FileInfo> for Model { - type Error = RustusError; - - fn try_from(value: FileInfo) -> Result<Self, Self::Error> { - let info_str = serde_json::to_string(&value).map_err(RustusError::from)?; - Ok(Self { - id: value.id, - file_info: info_str, - }) - } -} diff --git a/src/info_storages/file_info_storage.rs b/src/info_storages/file_info_storage.rs index 2d0de946dfde961d2cb8059aa98b7cfff930826f..fe8ccf14ea9368f6187e1cadf9ab1a2fa0f60c44 100644 --- a/src/info_storages/file_info_storage.rs +++ b/src/info_storages/file_info_storage.rs @@ -38,10 +38,10 @@ impl InfoStorage for FileInfoStorage { Ok(()) } - async fn set_info(&self, file_info: &FileInfo) -> RustusResult<()> { + async fn set_info(&self, file_info: &FileInfo, create: bool) -> RustusResult<()> { let mut file = OpenOptions::new() .write(true) - .create(true) + .create(create) .open(self.info_file_path(file_info.id.as_str()).as_path()) .await .map_err(|err| { diff --git a/src/info_storages/mod.rs b/src/info_storages/mod.rs index c13dbfd6bc1d7e399d5d2cabd800bfb3ac63e2c9..6e706640e35d61cf5ab8523c763e059863354850 100644 --- a/src/info_storages/mod.rs +++ b/src/info_storages/mod.rs @@ -11,7 +11,6 @@ use crate::RustusConf; mod file_info; pub mod db_info_storage; -pub mod db_model; pub mod file_info_storage; #[derive(PartialEq, From, Display, Clone, Debug)] @@ -58,7 +57,7 @@ impl AvailableInfoStores { #[async_trait] pub trait InfoStorage { async fn prepare(&mut self) -> RustusResult<()>; - async fn set_info(&self, file_info: &FileInfo) -> RustusResult<()>; + async fn set_info(&self, file_info: &FileInfo, create: bool) -> RustusResult<()>; async fn get_info(&self, file_id: &str) -> RustusResult<FileInfo>; async fn remove_info(&self, file_id: &str) -> RustusResult<()>; } diff --git a/src/storages/file_storage.rs b/src/storages/file_storage.rs index c2434aedd4e41c3e6b44ebb7f337ef2946dc3296..b7fb659fcd01e580b7f5458a33b5e720d9dd0e50 100644 --- a/src/storages/file_storage.rs +++ b/src/storages/file_storage.rs @@ -2,8 +2,8 @@ use std::collections::HashMap; use std::path::PathBuf; use actix_files::NamedFile; +use async_std::fs::{DirBuilder, OpenOptions, remove_file}; use async_std::fs::create_dir_all; -use async_std::fs::{remove_file, DirBuilder, OpenOptions}; use async_std::prelude::*; use async_trait::async_trait; use log::error; @@ -11,8 +11,8 @@ use uuid::Uuid; use crate::errors::{RustusError, RustusResult}; use crate::info_storages::{FileInfo, InfoStorage}; -use crate::storages::Storage; use crate::RustusConf; +use crate::storages::Storage; pub struct FileStorage { app_conf: RustusConf, @@ -93,7 +93,7 @@ impl Storage for FileStorage { RustusError::UnableToWrite(info.path.clone()) })?; info.offset += bytes.len(); - self.info_storage.set_info(&info).await?; + self.info_storage.set_info(&info, false).await?; Ok(info.offset) } @@ -128,7 +128,7 @@ impl Storage for FileStorage { metadata, ); - self.info_storage.set_info(&file_info).await?; + self.info_storage.set_info(&file_info, true).await?; Ok(file_id) }