diff --git a/Cargo.lock b/Cargo.lock index 1302301..921badc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", ] @@ -47,7 +47,7 @@ dependencies = [ "parking_lot 0.12.1", "pin-project-lite 0.2.9", "smallvec", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-util 0.7.8", ] @@ -64,7 +64,7 @@ dependencies = [ "log", "memchr", "pin-project-lite 0.2.9", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-util 0.7.8", ] @@ -99,9 +99,9 @@ dependencies = [ "percent-encoding", "pin-project-lite 0.2.9", "rand 0.8.5", - "sha1 0.10.5", + "sha1", "smallvec", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-util 0.7.8", "tracing", "zstd 0.12.3+zstd.1.5.2", @@ -138,7 +138,7 @@ checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e" dependencies = [ "actix-macros", "futures-core", - "tokio 1.28.0", + "tokio 1.28.2", ] [[package]] @@ -155,7 +155,7 @@ dependencies = [ "mio 0.8.6", "num_cpus", "socket2 0.4.9", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", ] @@ -250,16 +250,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ - "gimli 0.26.2", -] - -[[package]] -name = "addr2line" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" -dependencies = [ - "gimli 0.27.2", + "gimli", ] [[package]] @@ -268,60 +259,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" -dependencies = [ - "generic-array", -] - -[[package]] -name = "aes" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" -dependencies = [ - "aes-soft", - "aesni", - "cipher", -] - -[[package]] -name = "aes-gcm" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - -[[package]] -name = "aes-soft" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" -dependencies = [ - "cipher", - "opaque-debug", -] - -[[package]] -name = "aesni" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" -dependencies = [ - "cipher", - "opaque-debug", -] - [[package]] name = "ahash" version = "0.7.6" @@ -375,6 +312,12 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec8ad6edb4840b78c5c3d88de606b22252d552b55f3a4699fbb10fc070ec3049" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -405,6 +348,12 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" +[[package]] +name = "arc-swap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" + [[package]] name = "argon2" version = "0.4.1" @@ -417,34 +366,12 @@ dependencies = [ "rayon", ] -[[package]] -name = "arrayref" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" - -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "arrayvec" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" -dependencies = [ - "quote", - "syn 1.0.109", -] - [[package]] name = "async-channel" version = "1.8.0" @@ -456,171 +383,6 @@ dependencies = [ "futures-core", ] -[[package]] -name = "async-dup" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7427a12b8dc09291528cfb1da2447059adb4a257388c2acd6497a79d55cf6f7c" -dependencies = [ - "futures-io", - "simple-mutex", -] - -[[package]] -name = "async-executor" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" -dependencies = [ - "async-lock", - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-lock", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -name = "async-h1" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8101020758a4fc3a7c326cb42aa99e9fa77cbfb76987c128ad956406fe1f70a7" -dependencies = [ - "async-channel", - "async-dup", - "async-std", - "futures-core", - "http-types", - "httparse", - "log", - "pin-project", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock", - "autocfg 1.1.0", - "cfg-if 1.0.0", - "concurrent-queue", - "futures-lite", - "log", - "parking", - "polling", - "rustix 0.37.19", - "slab", - "socket2 0.4.9", - "waker-fn", -] - -[[package]] -name = "async-lock" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-process" -version = "1.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9" -dependencies = [ - "async-io", - "async-lock", - "autocfg 1.1.0", - "blocking", - "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "rustix 0.37.19", - "signal-hook", - "windows-sys 0.48.0", -] - -[[package]] -name = "async-session" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345022a2eed092cd105cc1b26fd61c341e100bd5fcbbd792df4baf31c2cc631f" -dependencies = [ - "anyhow", - "async-std", - "async-trait", - "base64 0.12.3", - "bincode", - "blake3", - "chrono", - "hmac 0.8.1", - "kv-log-macro", - "rand 0.7.3", - "serde", - "serde_json", - "sha2 0.9.9", -] - -[[package]] -name = "async-sse" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10" -dependencies = [ - "async-channel", - "async-std", - "http-types", - "log", - "memchr", - "pin-project-lite 0.1.12", -] - -[[package]] -name = "async-std" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" -dependencies = [ - "async-attributes", - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "async-process", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite 0.2.9", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - [[package]] name = "async-stripe" version = "0.21.0" @@ -630,7 +392,7 @@ dependencies = [ "chrono", "futures-util", "hex", - "hmac 0.12.1", + "hmac", "http-types", "hyper 0.14.26", "hyper-tls 0.5.0", @@ -638,20 +400,14 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_qs 0.10.1", - "sha2 0.10.6", + "sha2", "smart-default", "smol_str", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "uuid 0.8.2", ] -[[package]] -name = "async-task" -version = "4.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" - [[package]] name = "async-trait" version = "0.1.68" @@ -663,19 +419,6 @@ dependencies = [ "syn 2.0.15", ] -[[package]] -name = "async-tungstenite" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b30ef0ea5c20caaa54baea49514a206308989c68be7ecd86c7f956e4da6378" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project-lite 0.2.9", - "tungstenite", -] - [[package]] name = "atoi" version = "1.0.0" @@ -694,12 +437,6 @@ dependencies = [ "autocfg 1.1.0", ] -[[package]] -name = "atomic-waker" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" - [[package]] name = "atty" version = "0.2.14" @@ -726,33 +463,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backtrace" -version = "0.3.67" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" -dependencies = [ - "addr2line 0.19.0", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide 0.6.2", - "object 0.30.3", - "rustc-demangle", -] - -[[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.1" @@ -771,12 +481,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bidir_iter" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a86c01adf7d13bc6796665b2cebc3240e471b9dfe3b6c9e85d87724499ffb4f8" - [[package]] name = "bigdecimal" version = "0.3.0" @@ -815,31 +519,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "digest 0.10.6", -] - -[[package]] -name = "blake3" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b64485778c4f16a6a5a9d335e80d449ac6c70cdd6a06d2af18a6f6f775a125b3" -dependencies = [ - "arrayref", - "arrayvec 0.5.2", - "cc", - "cfg-if 0.1.10", - "constant_time_eq", - "crypto-mac 0.8.0", - "digest 0.9.0", -] - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", + "digest", ] [[package]] @@ -851,21 +531,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" -dependencies = [ - "async-channel", - "async-lock", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", -] - [[package]] name = "borsh" version = "0.10.3" @@ -941,12 +606,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "buffered_offset_reader" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab6593d7a0e248ac2692fcc2f98e231548a33635da5682a078a7f1d0cd64c0b1" - [[package]] name = "bumpalo" version = "3.12.1" @@ -1002,6 +661,47 @@ dependencies = [ "bytes 1.4.0", ] +[[package]] +name = "cache-adapter" +version = "0.1.0" +dependencies = [ + "async-trait", + "serde", + "thiserror", + "toml 0.7.3", +] + +[[package]] +name = "cache-adapter-embedded-memory" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "cache-adapter", + "chrono", + "futures-executor", + "serde", + "tokio 1.28.2", + "tracing", +] + +[[package]] +name = "cache-adapter-redis" +version = "0.1.0" +dependencies = [ + "async-trait", + "bincode", + "cache-adapter", + "chrono", + "deadpool", + "futures", + "redis", + "redis-async-pool", + "serde", + "tokio 1.28.2", + "tracing", +] + [[package]] name = "cap-fs-ext" version = "0.26.1" @@ -1085,7 +785,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 0.8.2", ] @@ -1126,7 +826,7 @@ dependencies = [ "strum", "tarpc", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", "whatlang", @@ -1134,13 +834,13 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", "time 0.1.45", @@ -1148,15 +848,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "cipher" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" -dependencies = [ - "generic-array", -] - [[package]] name = "clap" version = "2.34.0" @@ -1191,6 +882,20 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes 1.4.0", + "futures-core", + "memchr", + "pin-project-lite 0.2.9", + "tokio 1.28.2", + "tokio-util 0.7.8", +] + [[package]] name = "common_macros" version = "0.1.1" @@ -1234,41 +939,12 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "const_fn" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "convert_case" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" -[[package]] -name = "cookie" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" -dependencies = [ - "aes-gcm", - "base64 0.13.1", - "hkdf 0.10.0", - "hmac 0.10.1", - "percent-encoding", - "rand 0.8.5", - "sha2 0.9.9", - "time 0.2.27", - "version_check", -] - [[package]] name = "cookie" version = "0.16.2" @@ -1287,9 +963,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "base64 0.21.0", - "hmac 0.12.1", + "hmac", "rand 0.8.5", - "sha2 0.10.6", + "sha2", "subtle", "time 0.3.20", "version_check", @@ -1329,12 +1005,6 @@ dependencies = [ "libc", ] -[[package]] -name = "cpuid-bool" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" - [[package]] name = "cranelift-bforest" version = "0.90.1" @@ -1350,7 +1020,7 @@ version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b40ed2dd13c2ac7e24f88a3090c68ad3414eb1d066a95f8f1f7b3b819cb4e46" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", @@ -1358,7 +1028,7 @@ dependencies = [ "cranelift-egraph", "cranelift-entity", "cranelift-isle", - "gimli 0.26.2", + "gimli", "log", "regalloc2", "smallvec", @@ -1549,26 +1219,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" -dependencies = [ - "generic-array", - "subtle", -] - -[[package]] -name = "crypto-mac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "ctor" version = "0.1.26" @@ -1579,28 +1229,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "ctr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" -dependencies = [ - "cipher", -] - -[[package]] -name = "curve25519-dalek" -version = "3.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" -dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", - "subtle", - "zeroize", -] - [[package]] name = "cxx" version = "1.0.94" @@ -1695,6 +1323,25 @@ dependencies = [ "sqlx-core", ] +[[package]] +name = "deadpool" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e" +dependencies = [ + "async-trait", + "deadpool-runtime", + "num_cpus", + "retain_mut", + "tokio 1.28.2", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1" + [[package]] name = "derive_more" version = "0.99.17" @@ -1704,26 +1351,17 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", + "rustc_version", "syn 1.0.109", ] -[[package]] -name = "digest" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" -dependencies = [ - "generic-array", -] - [[package]] name = "digest" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "crypto-common", "subtle", ] @@ -1779,12 +1417,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "displaydoc" version = "0.2.4" @@ -1826,28 +1458,6 @@ dependencies = [ "syn 2.0.15", ] -[[package]] -name = "ed25519" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" -dependencies = [ - "signature", -] - -[[package]] -name = "ed25519-dalek" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" -dependencies = [ - "curve25519-dalek", - "ed25519", - "rand 0.7.3", - "sha2 0.9.9", - "zeroize", -] - [[package]] name = "educe" version = "0.4.22" @@ -1884,7 +1494,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 0.8.2", ] @@ -1914,45 +1524,23 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "rustc_version 0.4.0", + "rustc_version", "syn 1.0.109", ] -[[package]] -name = "env_logger" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" -dependencies = [ - "atty", - "humantime 1.3.0", - "log", - "regex", - "termcolor", -] - [[package]] name = "env_logger" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "humantime 2.1.0", + "humantime", "is-terminal 0.4.7", "log", "regex", "termcolor", ] -[[package]] -name = "erased-serde" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" -dependencies = [ - "serde", -] - [[package]] name = "errno" version = "0.2.8" @@ -2003,37 +1591,29 @@ version = "0.1.0" dependencies = [ "bincode", "serde", + "serde_json", "thiserror", ] +[[package]] +name = "event-bus-redis" +version = "0.1.0" +dependencies = [ + "event-bus-adapter", + "futures", + "futures-util", + "redis-async", + "serde", + "thiserror", + "tracing", +] + [[package]] name = "event-listener" version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "failure" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" -dependencies = [ - "backtrace", - "failure_derive", -] - -[[package]] -name = "failure_derive" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "synstructure", -] - [[package]] name = "fake" version = "2.6.0" @@ -2076,29 +1656,13 @@ dependencies = [ "instant", ] -[[package]] -name = "femme" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc04871e5ae3aa2952d552dae6b291b3099723bf779a8054281c1366a54613ef" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "log", - "serde", - "serde_derive", - "serde_json", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "file-per-thread-logger" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866" dependencies = [ - "env_logger 0.10.0", + "env_logger", "log", ] @@ -2121,7 +1685,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" dependencies = [ "crc32fast", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -2181,27 +1745,6 @@ dependencies = [ "spin 0.9.8", ] -[[package]] -name = "flumedb" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee3e89a7a10dac2be3ed47e6ed014992dea7b6759580e5a0b70b5435ca67594b" -dependencies = [ - "bidir_iter", - "buffered_offset_reader", - "byteorder", - "bytes 0.5.6", - "failure", - "log", - "pretty_env_logger", - "serde", - "serde_bytes", - "serde_cbor", - "serde_derive", - "serde_json", - "ssb-multiformats", -] - [[package]] name = "fnv" version = "1.0.7" @@ -2438,16 +1981,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "ghash" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" -dependencies = [ - "opaque-debug", - "polyval", -] - [[package]] name = "ghost" version = "0.1.9" @@ -2470,12 +2003,6 @@ dependencies = [ "stable_deref_trait", ] -[[package]] -name = "gimli" -version = "0.27.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" - [[package]] name = "git2" version = "0.14.4" @@ -2495,18 +2022,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "gloo-timers" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "gumdrop" version = "0.8.1" @@ -2561,17 +2076,11 @@ dependencies = [ "http", "indexmap", "slab", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-util 0.7.8", "tracing", ] -[[package]] -name = "half" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" - [[package]] name = "handlebars" version = "4.3.6" @@ -2675,43 +2184,13 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hkdf" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" -dependencies = [ - "digest 0.9.0", - "hmac 0.10.1", -] - [[package]] name = "hkdf" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" dependencies = [ - "hmac 0.12.1", -] - -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac 0.8.0", - "digest 0.9.0", -] - -[[package]] -name = "hmac" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" -dependencies = [ - "crypto-mac 0.10.1", - "digest 0.9.0", + "hmac", ] [[package]] @@ -2720,7 +2199,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.6", + "digest", ] [[package]] @@ -2755,18 +2234,6 @@ dependencies = [ "pin-project-lite 0.2.9", ] -[[package]] -name = "http-client" -version = "6.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" -dependencies = [ - "async-trait", - "cfg-if 1.0.0", - "http-types", - "log", -] - [[package]] name = "http-types" version = "2.12.0" @@ -2775,9 +2242,7 @@ checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" dependencies = [ "anyhow", "async-channel", - "async-std", "base64 0.13.1", - "cookie 0.14.4", "futures-lite", "http", "infer", @@ -2808,15 +2273,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] - [[package]] name = "humantime" version = "2.1.0" @@ -2865,7 +2321,7 @@ dependencies = [ "itoa 1.0.6", "pin-project-lite 0.2.9", "socket2 0.4.9", - "tokio 1.28.0", + "tokio 1.28.2", "tower-service", "tracing", "want", @@ -2893,7 +2349,7 @@ dependencies = [ "bytes 1.4.0", "hyper 0.14.26", "native-tls", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-native-tls", ] @@ -2965,15 +2421,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" -[[package]] -name = "input_buffer" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" -dependencies = [ - "bytes 1.4.0", -] - [[package]] name = "insta" version = "1.29.0" @@ -3195,11 +2642,11 @@ checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f" dependencies = [ "base64 0.13.1", "crypto-common", - "digest 0.10.6", - "hmac 0.12.1", + "digest", + "hmac", "serde", "serde_json", - "sha2 0.10.6", + "sha2", ] [[package]] @@ -3212,15 +2659,6 @@ dependencies = [ "winapi-build", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lang_provider" version = "0.1.0" @@ -3358,29 +2796,6 @@ dependencies = [ "local-waker", ] -[[package]] -name = "local-event-bus" -version = "0.1.0" -dependencies = [ - "async-std", - "bincode", - "crossbeam-channel", - "event-bus-adapter", - "flumedb", - "futures", - "futures-util", - "gumdrop", - "memmap2", - "serde", - "serde_json", - "thiserror", - "tide", - "tide-websockets", - "tracing", - "tracing-subscriber", - "uuid 1.3.2", -] - [[package]] name = "local-waker" version = "0.1.3" @@ -3404,8 +2819,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", - "serde", - "value-bag", ] [[package]] @@ -3465,7 +2878,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.6", + "digest", ] [[package]] @@ -3483,15 +2896,6 @@ dependencies = [ "rustix 0.37.19", ] -[[package]] -name = "memmap2" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" -dependencies = [ - "libc", -] - [[package]] name = "memoffset" version = "0.6.5" @@ -3532,15 +2936,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "miniz_oxide" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" -dependencies = [ - "adler", -] - [[package]] name = "miniz_oxide" version = "0.7.1" @@ -3736,27 +3131,12 @@ dependencies = [ "memchr", ] -[[package]] -name = "object" -version = "0.30.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openssl" version = "0.10.52" @@ -3861,7 +3241,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", ] @@ -4010,7 +3390,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", "wapc", @@ -4067,7 +3447,7 @@ checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2", ] [[package]] @@ -4114,60 +3494,12 @@ version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg 1.1.0", - "bitflags", - "cfg-if 1.0.0", - "concurrent-queue", - "libc", - "log", - "pin-project-lite 0.2.9", - "windows-sys 0.48.0", -] - -[[package]] -name = "poly1305" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" -dependencies = [ - "cpuid-bool", - "universal-hash", -] - -[[package]] -name = "polyval" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" -dependencies = [ - "cpuid-bool", - "opaque-debug", - "universal-hash", -] - [[package]] name = "ppv-lite86" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "pretty_env_logger" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "717ee476b1690853d222af4634056d830b5197ffd747726a9a1eee6da9f49074" -dependencies = [ - "chrono", - "env_logger 0.6.2", - "log", -] - [[package]] name = "proc-macro-crate" version = "0.1.5" @@ -4201,12 +3533,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "proc-macro-hack" -version = "0.5.20+deprecated" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" - [[package]] name = "proc-macro2" version = "1.0.56" @@ -4261,12 +3587,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "1.0.26" @@ -4516,6 +3836,28 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "redis" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ea8c51b5dc1d8e5fd3350ec8167f464ec0995e79f2e90a075b63371500d557f" +dependencies = [ + "arc-swap", + "async-trait", + "bytes 1.4.0", + "combine", + "futures", + "futures-util", + "itoa 1.0.6", + "percent-encoding", + "pin-project-lite 0.2.9", + "ryu", + "sha1_smol", + "tokio 1.28.2", + "tokio-util 0.7.8", + "url", +] + [[package]] name = "redis-async" version = "0.16.0" @@ -4528,21 +3870,19 @@ dependencies = [ "futures-util", "log", "pin-project", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-util 0.7.8", ] [[package]] -name = "redis-event-bus" -version = "0.1.0" +name = "redis-async-pool" +version = "0.2.4" +source = "git+https://github.com/Eraden/redis-async-pool.git?branch=upgrade-dependencies#1983162209d5ae949f501a66ce70dbca2d3a3499" dependencies = [ - "event-bus-adapter", - "futures", - "futures-util", - "redis-async", - "serde", - "thiserror", - "tracing", + "async-trait", + "deadpool", + "rand 0.8.5", + "redis", ] [[package]] @@ -4689,7 +4029,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-native-tls", "tower-service", "url", @@ -4699,6 +4039,12 @@ dependencies = [ "winreg 0.10.1", ] +[[package]] +name = "retain_mut" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4389f1d5789befaf6029ebd9f7dac4af7f7e3d61b69d4f30e2ac02b57e7712b0" + [[package]] name = "ring" version = "0.16.20" @@ -4761,12 +4107,6 @@ dependencies = [ "serde", ] -[[package]] -name = "route-recognizer" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e" - [[package]] name = "rumqttc" version = "0.21.0" @@ -4780,7 +4120,7 @@ dependencies = [ "rustls-native-certs", "rustls-pemfile", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-rustls", ] @@ -4790,7 +4130,7 @@ version = "1.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26bd36b60561ee1fb5ec2817f198b6fd09fa571c897a5e86d1487cfc2b096dfc" dependencies = [ - "arrayvec 0.7.2", + "arrayvec", "borsh", "bytecheck", "byteorder", @@ -4814,22 +4154,13 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver", ] [[package]] @@ -4920,16 +4251,6 @@ version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" -[[package]] -name = "salsa20" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399f290ffc409596022fce5ea5d4138184be4784f2b28c62c59f0d8389059a15" -dependencies = [ - "cipher", - "zeroize", -] - [[package]] name = "schannel" version = "0.1.21" @@ -4988,7 +4309,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", "whatlang", @@ -5023,27 +4344,12 @@ version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" -[[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" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "sendgrid" version = "0.18.1" @@ -5060,53 +4366,24 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.162" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" dependencies = [ "serde_derive", ] -[[package]] -name = "serde_bytes" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_cbor" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7081ed758ec726a6ed8ee7e92f5d3f6e6f8c3901b1f972e3a4a2f2599fad14f" -dependencies = [ - "byteorder", - "half", - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.162" +version = "1.0.163" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6" +checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" dependencies = [ "proc-macro2", "quote", "syn 2.0.15", ] -[[package]] -name = "serde_fmt" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d4ddca14104cd60529e8c7f7ba71a2c8acd8f7f5cfcdc2faf97eeb7c3010a4" -dependencies = [ - "serde", -] - [[package]] name = "serde_json" version = "1.0.96" @@ -5170,28 +4447,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - -[[package]] -name = "sha1" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -dependencies = [ - "sha1_smol", -] - [[package]] name = "sha1" version = "0.10.5" @@ -5200,7 +4455,7 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.6", + "digest", ] [[package]] @@ -5209,19 +4464,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.10.6" @@ -5230,7 +4472,7 @@ checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.6", + "digest", ] [[package]] @@ -5251,16 +4493,6 @@ dependencies = [ "dirs 4.0.0", ] -[[package]] -name = "signal-hook" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" -dependencies = [ - "libc", - "signal-hook-registry", -] - [[package]] name = "signal-hook-registry" version = "1.4.1" @@ -5270,12 +4502,6 @@ dependencies = [ "libc", ] -[[package]] -name = "signature" -version = "1.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" - [[package]] name = "simdutf8" version = "0.1.4" @@ -5288,15 +4514,6 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" -[[package]] -name = "simple-mutex" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38aabbeafa6f6dead8cebf246fe9fae1f9215c8d29b3a69f93bd62a9e4a3dcd6" -dependencies = [ - "event-listener", -] - [[package]] name = "simplelog" version = "0.7.6" @@ -5454,8 +4671,8 @@ dependencies = [ "git2", "hashlink", "hex", - "hkdf 0.12.3", - "hmac 0.12.1", + "hkdf", + "hmac", "indexmap", "ipnetwork", "itoa 1.0.6", @@ -5474,8 +4691,8 @@ dependencies = [ "rustls-pemfile", "serde", "serde_json", - "sha1 0.10.5", - "sha2 0.10.6", + "sha1", + "sha2", "smallvec", "sqlformat", "sqlx-rt", @@ -5502,7 +4719,7 @@ dependencies = [ "proc-macro2", "quote", "serde_json", - "sha2 0.10.6", + "sha2", "sqlx-core", "sqlx-rt", "syn 1.0.109", @@ -5516,110 +4733,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "804d3f245f894e61b1e6263c84b23ca675d96753b5abfd5cc8597d86806e8024" dependencies = [ "once_cell", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-rustls", ] -[[package]] -name = "ssb-crypto" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a055e461165ec87134bb33a521e7bb4e49f306ed14db31cab221dc649b2762a2" -dependencies = [ - "base64 0.13.1", - "curve25519-dalek", - "ed25519-dalek", - "hmac 0.10.1", - "rand 0.7.3", - "sha2 0.9.9", - "subtle", - "x25519-dalek", - "xsalsa20poly1305", - "zerocopy", - "zeroize", -] - -[[package]] -name = "ssb-multiformats" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f56858fd2b4e75b01522b8e402f4d5d35cf7a4cbcb53b60b72d28782f755cac" -dependencies = [ - "base64 0.13.1", - "serde", - "ssb-crypto", -] - [[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" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version 0.2.3", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn 1.0.109", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1 0.6.1", - "syn 1.0.109", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "stock_manager" version = "0.1.0" @@ -5641,7 +4770,7 @@ dependencies = [ "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", ] @@ -5668,7 +4797,7 @@ dependencies = [ "payment_adapter", "serde", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", ] @@ -5736,15 +4865,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" -[[package]] -name = "sval" -version = "1.0.0-alpha.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" -dependencies = [ - "serde", -] - [[package]] name = "syn" version = "1.0.109" @@ -5767,18 +4887,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "synstructure" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", - "unicode-xid", -] - [[package]] name = "system-interface" version = "0.23.0" @@ -5821,7 +4929,7 @@ dependencies = [ "anyhow", "fnv", "futures", - "humantime 2.1.0", + "humantime", "opentelemetry", "pin-project", "rand 0.8.5", @@ -5829,7 +4937,7 @@ dependencies = [ "static_assertions", "tarpc-plugins", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tokio-serde", "tokio-util 0.7.8", "tracing", @@ -5922,47 +5030,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tide" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0" -dependencies = [ - "async-h1", - "async-session", - "async-sse", - "async-std", - "async-trait", - "femme", - "futures-util", - "http-client", - "http-types", - "kv-log-macro", - "log", - "pin-project-lite 0.2.9", - "route-recognizer", - "serde", - "serde_json", -] - -[[package]] -name = "tide-websockets" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3592c5cb5cb1b7a2ff3a0e5353170c1bb5b104b2f66dd06f73304169b52cc725" -dependencies = [ - "async-dup", - "async-std", - "async-tungstenite", - "base64 0.13.1", - "futures-util", - "pin-project", - "serde", - "serde_json", - "sha-1", - "tide", -] - [[package]] name = "time" version = "0.1.45" @@ -5974,21 +5041,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "time" -version = "0.2.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" -dependencies = [ - "const_fn", - "libc", - "standback", - "stdweb", - "time-macros 0.1.1", - "version_check", - "winapi 0.3.9", -] - [[package]] name = "time" version = "0.3.20" @@ -5998,7 +5050,7 @@ dependencies = [ "itoa 1.0.6", "serde", "time-core", - "time-macros 0.2.8", + "time-macros", ] [[package]] @@ -6007,16 +5059,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" -[[package]] -name = "time-macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - [[package]] name = "time-macros" version = "0.2.8" @@ -6026,19 +5068,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn 1.0.109", -] - [[package]] name = "tinystr" version = "0.7.1" @@ -6078,20 +5107,20 @@ dependencies = [ "futures", "futures-util", "gumdrop", - "hmac 0.12.1", + "hmac", "jwt", "model", "password-hash 0.5.0", "rand_core 0.6.4", "rumqttc", "serde", - "sha2 0.10.6", + "sha2", "sqlx", "sqlx-core", "tarpc", "testx", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", "uuid 1.3.2", ] @@ -6116,9 +5145,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.28.0" +version = "1.28.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f" +checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" dependencies = [ "autocfg 1.1.0", "bytes 1.4.0", @@ -6151,7 +5180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", - "tokio 1.28.0", + "tokio 1.28.2", ] [[package]] @@ -6161,7 +5190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", - "tokio 1.28.0", + "tokio 1.28.2", "webpki", ] @@ -6189,7 +5218,7 @@ checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite 0.2.9", - "tokio 1.28.0", + "tokio 1.28.2", ] [[package]] @@ -6227,7 +5256,7 @@ dependencies = [ "futures-sink", "pin-project-lite 0.2.9", "slab", - "tokio 1.28.0", + "tokio 1.28.2", "tracing", ] @@ -6410,26 +5439,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" -[[package]] -name = "tungstenite" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" -dependencies = [ - "base64 0.13.1", - "byteorder", - "bytes 1.4.0", - "http", - "httparse", - "input_buffer", - "log", - "rand 0.8.5", - "sha-1", - "thiserror", - "url", - "utf-8", -] - [[package]] name = "type-map" version = "0.4.0" @@ -6511,12 +5520,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - [[package]] name = "unicode_categories" version = "0.1.1" @@ -6529,16 +5532,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402bb19d8e03f1d1a7450e2bd613980869438e0666331be3e073089124aa1adc" -[[package]] -name = "universal-hash" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "untrusted" version = "0.7.1" @@ -6557,12 +5550,6 @@ dependencies = [ "serde", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "uuid" version = "0.8.2" @@ -6607,20 +5594,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "value-bag" -version = "1.0.0-alpha.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" -dependencies = [ - "ctor", - "erased-serde", - "serde", - "serde_fmt", - "sval", - "version_check", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -6686,7 +5659,7 @@ dependencies = [ "log", "rusty_pool", "thiserror", - "tokio 1.28.0", + "tokio 1.28.2", "wapc", ] @@ -6850,7 +5823,7 @@ dependencies = [ "indexmap", "libc", "log", - "object 0.29.0", + "object", "once_cell", "paste", "psm", @@ -6891,7 +5864,7 @@ dependencies = [ "log", "rustix 0.35.13", "serde", - "sha2 0.10.6", + "sha2", "toml 0.5.11", "windows-sys 0.36.1", "zstd 0.11.2+zstd.1.5.2", @@ -6909,9 +5882,9 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.26.2", + "gimli", "log", - "object 0.29.0", + "object", "target-lexicon", "thiserror", "wasmparser", @@ -6926,10 +5899,10 @@ checksum = "754b97f7441ac780a7fa738db5b9c23c1b70ef4abccd8ad205ada5669d196ba2" dependencies = [ "anyhow", "cranelift-entity", - "gimli 0.26.2", + "gimli", "indexmap", "log", - "object 0.29.0", + "object", "serde", "target-lexicon", "thiserror", @@ -6956,15 +5929,15 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32800cb6e29faabab7056593f70a4c00c65c75c365aaf05406933f2169d0c22f" dependencies = [ - "addr2line 0.17.0", + "addr2line", "anyhow", "bincode", "cfg-if 1.0.0", "cpp_demangle", - "gimli 0.26.2", + "gimli", "ittapi", "log", - "object 0.29.0", + "object", "rustc-demangle", "serde", "target-lexicon", @@ -6982,7 +5955,7 @@ version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe057012a0ba6cee3685af1e923d6e0a6cb9baf15fb3ffa4be3d7f712c7dec42" dependencies = [ - "object 0.29.0", + "object", "once_cell", "rustix 0.35.13", ] @@ -7499,17 +6472,6 @@ dependencies = [ "winapi-build", ] -[[package]] -name = "x25519-dalek" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077" -dependencies = [ - "curve25519-dalek", - "rand_core 0.5.1", - "zeroize", -] - [[package]] name = "xattr" version = "0.2.3" @@ -7519,19 +6481,6 @@ dependencies = [ "libc", ] -[[package]] -name = "xsalsa20poly1305" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0304c336e98d753428f7b3d8899d60b8a87a961ef50bdfc44af0c1bea2651ce5" -dependencies = [ - "aead", - "poly1305", - "salsa20", - "subtle", - "zeroize", -] - [[package]] name = "xz2" version = "0.1.7" @@ -7550,47 +6499,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "zerocopy" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6580539ad917b7c026220c4b3f2c08d52ce54d6ce0dc491e66002e35388fab46" -dependencies = [ - "byteorder", - "zerocopy-derive", -] - -[[package]] -name = "zerocopy-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d498dbd1fd7beb83c86709ae1c33ca50942889473473d287d56ce4770a18edfb" -dependencies = [ - "proc-macro2", - "syn 1.0.109", - "synstructure", -] - -[[package]] -name = "zeroize" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.15", -] - [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" diff --git a/Cargo.toml b/Cargo.toml index fa3230a..87c5407 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,8 +33,11 @@ members = [ # EVENT BUS "crates/event-bus-messages", "crates/event-bus-adapter", - "crates/local-event-bus", - "crates/redis-event-bus", + "crates/event-bus-redis", + # CACHE + "crates/cache-adapter", + "crates/cache-adapter-redis", + "crates/cache-adapter-embedded-memory", ] exclude = [ "crates/web" diff --git a/crates/cache-adapter-embedded-memory/Cargo.toml b/crates/cache-adapter-embedded-memory/Cargo.toml new file mode 100644 index 0000000..9c43e71 --- /dev/null +++ b/crates/cache-adapter-embedded-memory/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "cache-adapter-embedded-memory" +version = "0.1.0" +edition = "2021" + +[dependencies] +cache-adapter = { path = "../cache-adapter" } +serde = { version = "1.0.163", features = ['derive'] } +async-trait = { version = "0.1.68" } +chrono = { version = "0.4.26" } +bincode = { version = "1" } +tracing = { version = "0" } +futures-executor = { version = "0.3.28", features = [] } +tokio = { version = "1.28.2", features = ['full'] } diff --git a/crates/cache-adapter-embedded-memory/src/lib.rs b/crates/cache-adapter-embedded-memory/src/lib.rs new file mode 100644 index 0000000..6c1c5cf --- /dev/null +++ b/crates/cache-adapter-embedded-memory/src/lib.rs @@ -0,0 +1,146 @@ +use std::collections::HashMap; +use std::sync::{Arc, RwLock}; +use std::time::Duration; + +use async_trait::async_trait; +use cache_adapter::{CResult, CacheAdapter, Config, Error, InvalidatePattern}; +use serde::de::DeserializeOwned; +use serde::{Deserialize, Serialize}; +use tracing::error; + +pub struct CacheEntry { + pub expires_at: Option, + pub payload: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct MemoryConfig { + ttl_secs: Option, +} + +#[derive(Clone)] +pub struct EmbeddedMemoryCacheAdapter { + storage: Arc>>, + ttl: Option, +} + +#[async_trait] +impl CacheAdapter for EmbeddedMemoryCacheAdapter { + async fn new(config: Config) -> CResult { + let config: MemoryConfig = config.config::().map_err(|e| { + error!("Failed to parse memory cache config: {e}"); + Error::InvalidConfig + })?; + Ok(Self { + storage: Arc::new(Default::default()), + ttl: config.ttl_secs.map(|n| Duration::from_secs(n)), + }) + } + + async fn read(&mut self, key: &str) -> CResult> + where + T: DeserializeOwned, + { + let (valid, data) = { + let lock = self.storage.read().unwrap(); + let entry = match lock.get(key) { + None => return Ok(None), + Some(entry) => entry, + }; + let valid = entry + .expires_at + .map(|exp| exp >= chrono::Utc::now().naive_utc()) + .unwrap_or(true); + let data = if valid { + match bincode::deserialize::(&entry.payload) { + Ok(t) => Some(t), + Err(e) => { + tracing::warn!("Malformed embedded cache entry {key:?}: {e}"); + return Err(Error::InvalidEntry); + } + } + } else { + None + }; + (valid, data) + }; + if valid { + Ok(data) + } else { + self.storage.write().unwrap().remove(key); + Ok(None) + } + } + + async fn set(&mut self, key: &str, data: T, expires_in: Option) -> CResult<()> + where + T: Serialize + Send, + { + let expires_at = if let Some(duration) = expires_in.or(self.ttl) { + let storage = self.storage.clone(); + let exp = + chrono::Utc::now().naive_utc() + chrono::Duration::from_std(duration).unwrap(); + + let key = key.to_owned(); + tokio::task::spawn(async move { + tokio::time::sleep(duration).await; + storage.write().unwrap().remove(&key); + }); + + Some(exp) + } else { + None + }; + + self.storage.write().unwrap().insert( + key.into(), + CacheEntry { + expires_at, + payload: bincode::serialize(&data).map_err(|e| { + tracing::warn!("Malformed embedded cache entry {key:?}: {e}"); + Error::InvalidEntry + })?, + }, + ); + Ok(()) + } + + async fn invalidate(&mut self, pattern: InvalidatePattern<'_>) -> CResult { + let keys = self + .storage + .read() + .unwrap() + .keys() + .filter(|k| pattern.matches(k)) + .cloned() + .collect::>(); + let mut lock = self.storage.write().unwrap(); + let len = keys.len(); + for key in keys { + lock.remove(&key); + } + Ok(len as u64) + } + + async fn clear(&mut self) -> CResult { + let mut lock = self.storage.write().unwrap(); + let size = lock.len() as u64; + lock.clear(); + Ok(size) + } +} + +trait MatchesKey { + fn matches(&self, key: &str) -> bool; +} + +impl<'s> MatchesKey for InvalidatePattern<'s> { + fn matches(&self, key: &str) -> bool { + match self { + InvalidatePattern::StartsWith(pattern) => key.starts_with(pattern.as_ref()), + InvalidatePattern::EndsWith(pattern) => key.ends_with(pattern.as_ref()), + InvalidatePattern::Contains(pattern) => key.contains(pattern.as_ref()), + InvalidatePattern::Const(pattern) => pattern.as_ref().eq(key), + } + } +} diff --git a/crates/cache-adapter-redis/Cargo.toml b/crates/cache-adapter-redis/Cargo.toml new file mode 100644 index 0000000..83af443 --- /dev/null +++ b/crates/cache-adapter-redis/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "cache-adapter-redis" +version = "0.1.0" +edition = "2021" + +[dependencies] +redis-async-pool = { git = "https://github.com/Eraden/redis-async-pool.git", branch = "upgrade-dependencies" } +cache-adapter = { path = "../cache-adapter" } +serde = { version = "1.0.163", features = ['derive'] } +async-trait = { version = "0.1.68" } +chrono = { version = "0.4.26" } +bincode = { version = "1" } +tracing = { version = "0" } +tokio = { version = "1.28.2", features = ['full'] } +redis = { version = "0.23.0" } +deadpool = { version = "0.9.5" } +futures = { version = "0.3.28" } diff --git a/crates/cache-adapter-redis/src/lib.rs b/crates/cache-adapter-redis/src/lib.rs new file mode 100644 index 0000000..9de7aaf --- /dev/null +++ b/crates/cache-adapter-redis/src/lib.rs @@ -0,0 +1,163 @@ +use std::time::Duration; + +use async_trait::async_trait; +use cache_adapter::{CResult, CacheAdapter, Config, Error, InvalidatePattern}; +use redis::AsyncCommands; +use redis_async_pool::*; +use serde::de::DeserializeOwned; +use serde::{Deserialize, Serialize}; +use tracing::{error, warn}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct RedisConfig { + host: String, + port: u16, + namespace: Option, +} + +type RedisPool = deadpool::managed::Pool; + +pub struct RedisCacheAdapter { + pub client: deadpool::managed::Pool, + pub namespace: Option, +} + +impl RedisCacheAdapter { + pub async fn connect(config: RedisConfig) -> CResult { + let client = redis::Client::open((config.host, config.port)).map_err(|e| { + error!("Failed to connect to redis: {e}"); + Error::Connect + })?; + let manager = RedisConnectionManager::new(client, true, None); + let client = RedisPool::builder(manager) + .max_size(5) + .build() + .map_err(|e| { + error!("Unable to connect with Redis: {e}"); + Error::Connect + })?; + Ok(Self { + client, + namespace: config.namespace, + }) + } + + fn format_key(&self, key: &str) -> String { + self.namespace + .as_ref() + .map(|s| format!("{s}:{key}")) + .unwrap_or(key.into()) + } +} + +#[async_trait] +impl CacheAdapter for RedisCacheAdapter { + async fn new(config: Config) -> CResult { + RedisCacheAdapter::connect(config.config().map_err(|e| { + error!("Failed to parse redis cache config: {e}"); + Error::InvalidConfig + })?) + .await + } + + async fn read(&mut self, key: &str) -> CResult> + where + T: DeserializeOwned, + { + let mut conn = self.client.get().await.map_err(|e| { + error!("Failed to use pool connection to redis: {e}"); + Error::Connect + })?; + let key = self.format_key(key); + let exists: bool = conn.exists(&key).await.map_err(|e| { + warn!("Failed to fetch {key:?} from redis: {e}"); + Error::Connect + })?; + if !exists { + return Ok(None); + } + let data: Vec = conn.get(&key).await.map_err(|e| { + warn!("Failed to fetch {key:?} from redis: {e}"); + Error::Connect + })?; + let entry: T = bincode::deserialize(&data).map_err(|e| { + warn!("Malformed redis cache entry {key:?}: {e}"); + Error::InvalidEntry + })?; + Ok(Some(entry)) + } + + async fn set(&mut self, key: &str, data: T, expires_in: Option) -> CResult<()> + where + T: Serialize + Send, + { + let mut conn = self.client.get().await.map_err(|e| { + error!("Failed to use pool connection to redis: {e}"); + Error::Connect + })?; + let data = bincode::serialize(&data).map_err(|e| { + warn!("Malformed redis cache entry {key:?}: {e}"); + Error::InvalidEntry + })?; + let key = self.format_key(&*key); + match expires_in { + Some(duration) => { + conn.set_ex(&*key, data, duration.as_secs() as usize) + .await + .map_err(|e| { + warn!("Failed to fetch {key:?} from redis: {e}"); + Error::Connect + })?; + } + None => { + conn.set(&*key, data).await.map_err(|e| { + warn!("Failed to fetch {key:?} from redis: {e}"); + Error::Connect + })?; + } + }; + Ok(()) + } + + async fn invalidate(&mut self, pattern: InvalidatePattern<'_>) -> CResult { + let mut conn = self.client.get().await.map_err(|e| { + error!("Failed to use pool connection to redis: {e}"); + Error::Connect + })?; + let keys: Vec = conn + .keys::>(pattern.as_string()) + .await + .map_err(|e| { + warn!("Failed to fetch keys with pattern {pattern:?} from redis: {e}"); + Error::Connect + })? + .iter() + .map(|s| self.format_key(s)) + .collect::>(); + let size = conn.del::<'_, _, u64>(&keys).await.map_err(|e| { + warn!("Failed to invalidate keys with pattern {pattern:?} from redis: {e}"); + Error::Invalidate(keys) + })?; + Ok(size) + } + + async fn clear(&mut self) -> CResult { + self.invalidate(InvalidatePattern::StartsWith("".into())) + .await + } +} + +trait AsRedisArgs { + fn as_string(&self) -> String; +} + +impl AsRedisArgs for InvalidatePattern<'_> { + fn as_string(&self) -> String { + match self { + InvalidatePattern::StartsWith(s) => format!("{s}*"), + InvalidatePattern::EndsWith(s) => format!("*{s}"), + InvalidatePattern::Contains(s) => format!("*{s}*"), + InvalidatePattern::Const(s) => format!("{s}"), + } + } +} diff --git a/crates/cache-adapter/Cargo.toml b/crates/cache-adapter/Cargo.toml new file mode 100644 index 0000000..8146feb --- /dev/null +++ b/crates/cache-adapter/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "cache-adapter" +version = "0.1.0" +edition = "2021" + +[dependencies] +async-trait = { version = "0.1.68" } +serde = { version = "1.0.163", feeatures = ['derive'] } +thiserror = { version = "1.0.40" } +toml = { version = "0.7.3" } diff --git a/crates/cache-adapter/src/lib.rs b/crates/cache-adapter/src/lib.rs new file mode 100644 index 0000000..831d19e --- /dev/null +++ b/crates/cache-adapter/src/lib.rs @@ -0,0 +1,57 @@ +use std::borrow::Cow; + +use async_trait::async_trait; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Unable to connect")] + Connect, + #[error("Entry is invalid")] + InvalidEntry, + #[error("Can't invalidate keys {0:?}")] + Invalidate(Vec), + #[error("Failed to parse config")] + InvalidConfig, +} + +pub type CResult = Result; + +pub struct Config(pub String); + +impl Config { + pub fn config(self) -> Result { + toml::from_str(&self.0) + } +} + +#[derive(Debug)] +pub enum InvalidatePattern<'s> { + StartsWith(Cow<'s, str>), + EndsWith(Cow<'s, str>), + Contains(Cow<'s, str>), + Const(Cow<'s, str>), +} + +#[async_trait] +pub trait CacheAdapter: Sized { + async fn new(config: Config) -> CResult; + + async fn read(&mut self, key: &str) -> CResult> + where + T: serde::de::DeserializeOwned; + + async fn set( + &mut self, + key: &str, + data: T, + expires_in: Option, + ) -> CResult<()> + where + T: serde::Serialize + Send; + + async fn invalidate(&mut self, pattern: InvalidatePattern<'_>) -> CResult; + + async fn clear(&mut self) -> CResult; +} + +pub struct CacheStorage {} diff --git a/crates/event-bus-adapter/src/lib.rs b/crates/event-bus-adapter/src/lib.rs index 4cf3b39..cb326ab 100644 --- a/crates/event-bus-adapter/src/lib.rs +++ b/crates/event-bus-adapter/src/lib.rs @@ -1,6 +1,6 @@ #![feature(async_fn_in_trait)] -pub use event_bus_messages::{Message, Msg}; +pub use event_bus_messages::*; #[derive(Debug, thiserror::Error)] pub enum EBError { @@ -23,7 +23,7 @@ impl Config { } pub trait MessageSend { - async fn send(&mut self, msg: Msg) -> EBResult<()>; + async fn send(&mut self, topic: Topic, msg: Msg) -> EBResult<()>; } pub trait EventBus @@ -33,3 +33,20 @@ where { async fn connect(config: Config) -> Result<(Stream, Sender), ()>; } + +/// For client-server purpose only +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub struct ClientMsg { + pub topic: Topic, + pub msg: Msg, +} + +impl ClientMsg { + pub fn from_bytes(v: &[u8]) -> bincode::Result { + bincode::deserialize(v) + } + + pub fn to_bytes(&self) -> bincode::Result> { + bincode::serialize(self) + } +} diff --git a/crates/event-bus-messages/Cargo.toml b/crates/event-bus-messages/Cargo.toml index 6a18fe7..960c40d 100644 --- a/crates/event-bus-messages/Cargo.toml +++ b/crates/event-bus-messages/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" thiserror = { version = "1.0.40" } serde = { version = "1.0.162", features = ['derive'] } bincode = { version = "1.3.3" } +serde_json = { version = "1.0.96" } diff --git a/crates/event-bus-messages/src/lib.rs b/crates/event-bus-messages/src/lib.rs index 663a40a..f6ad905 100644 --- a/crates/event-bus-messages/src/lib.rs +++ b/crates/event-bus-messages/src/lib.rs @@ -1,13 +1,48 @@ +use std::fmt::Debug; + #[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] -pub enum Msg { - Seek(usize), - Ping, - Pong, - Ack, - Acked, +pub enum TestMsg { Test1(usize, usize, usize, usize), Test2(u8, u16, u32, char, usize), - LenControl(usize, usize, usize, usize), +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub enum CursorMsg { + Seek(u64), + Aligned, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub enum AckMsg { + Ack, + Acked, +} + +#[derive(Debug, Clone, serde::Deserialize, serde::Serialize)] +pub enum Msg { + Ping, + Pong, + Ack(AckMsg), + Cursor(CursorMsg), + Test(TestMsg), +} + +impl Msg { + pub fn is_ack(&self) -> bool { + matches!(self, Msg::Ack(_)) + } + + pub fn is_aligned(&self) -> bool { + matches!(self, Msg::Cursor(CursorMsg::Aligned)) + } +} + +#[derive(Default, Debug, PartialEq, Clone, Copy, serde::Deserialize, serde::Serialize)] +pub enum Topic { + Test, + PingPong, + #[default] + Default, } impl Msg { @@ -23,6 +58,7 @@ impl Msg { #[derive(Debug, serde::Deserialize, serde::Serialize)] pub struct Message { pub offset: u64, + pub topic: Topic, pub payload: Msg, } diff --git a/crates/redis-event-bus/Cargo.toml b/crates/event-bus-redis/Cargo.toml similarity index 92% rename from crates/redis-event-bus/Cargo.toml rename to crates/event-bus-redis/Cargo.toml index 459f22d..7e38153 100644 --- a/crates/redis-event-bus/Cargo.toml +++ b/crates/event-bus-redis/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "redis-event-bus" +name = "event-bus-redis" version = "0.1.0" edition = "2021" diff --git a/crates/redis-event-bus/src/lib.rs b/crates/event-bus-redis/src/lib.rs similarity index 96% rename from crates/redis-event-bus/src/lib.rs rename to crates/event-bus-redis/src/lib.rs index f22c983..6045902 100644 --- a/crates/redis-event-bus/src/lib.rs +++ b/crates/event-bus-redis/src/lib.rs @@ -3,7 +3,7 @@ use std::pin::Pin; use std::task::{Context, Poll}; -use event_bus_adapter::{Config, EBError, EBResult, EventBus, Message, MessageSend, Msg}; +use event_bus_adapter::{Config, EBError, EBResult, EventBus, Message, MessageSend, Msg, Topic}; use futures_util::stream::{SplitSink, SplitStream}; use futures_util::{SinkExt, StreamExt}; use redis_async::client::connect::RespConnection; @@ -14,10 +14,11 @@ use tracing::warn; pub struct MessageSender(SplitSink); impl MessageSend for MessageSender { - async fn send(&mut self, msg: Msg) -> EBResult<()> { + async fn send(&mut self, topic: Topic, msg: Msg) -> EBResult<()> { match (Message { payload: msg, offset: 0, + topic, }) .to_bytes() { diff --git a/crates/local-event-bus/Cargo.toml b/crates/local-event-bus/Cargo.toml deleted file mode 100644 index f509ca6..0000000 --- a/crates/local-event-bus/Cargo.toml +++ /dev/null @@ -1,35 +0,0 @@ -[package] -name = "local-event-bus" -version = "0.1.0" -edition = "2021" - -[[bin]] -name = "leb" -path = "./src/main.rs" - -[[bin]] -name = "lebc" -path = "./src/check1.rs" - -[lib] -name = "leb" -path = "./src/lib.rs" - -[dependencies] -event-bus-adapter = { path = "../event-bus-adapter" } -thiserror = { version = "1.0.40" } -futures-util = { version = "0.3.28" } -futures = { version = "0.3.28" } -tracing = { version = "0" } -serde = { version = "1.0.162", features = ['derive'] } -flumedb = { version = "*" } -serde_json = { version = "*" } -async-std = { version = "*", features = ["attributes"] } -tide = { version = "0.16.0" } -gumdrop = { version = "*" } -tide-websockets = "0.4.0" -bincode = { version = "1" } -uuid = { version = "1.3.2", features = ['v4'] } -crossbeam-channel = { version = "0.5.8" } -tracing-subscriber = { version = "0.3.17", features = ['env-filter'] } -memmap2 = { version = "0.6.2" } diff --git a/crates/local-event-bus/src/check1.rs b/crates/local-event-bus/src/check1.rs deleted file mode 100644 index f2c2498..0000000 --- a/crates/local-event-bus/src/check1.rs +++ /dev/null @@ -1,39 +0,0 @@ -use async_std::stream::StreamExt; -use async_std::task::spawn; -use event_bus_adapter::{Config, EventBus, MessageSend, Msg}; -use leb::{LocalEventBus, MessageSender, MessageStream}; -use tracing::info; - -#[async_std::main] -async fn main() { - tracing_subscriber::fmt::init(); - - let config = Config("bind = \"localhost\"\nport = 8686".into()); - let (mut stream, mut sender) = - >::connect(config) - .await - .unwrap(); - - let mut sender2 = sender.clone(); - - info!("Send seek 0"); - MessageSend::send(&mut sender, Msg::Seek(0)).await.unwrap(); - info!("After seek 0"); - - info!("Send test1"); - MessageSend::send(&mut sender, Msg::Test1(1, 2, 3, 4)) - .await - .unwrap(); - info!("after test1"); - - info!("Send test2"); - MessageSend::send(&mut sender, Msg::Test2(1, 2, 3, 'a', 5)) - .await - .unwrap(); - info!("after test2"); - - while let Some(msg) = stream.next().await { - info!("Received: {msg:?}"); - sender2.ack().await.unwrap(); - } -} diff --git a/crates/local-event-bus/src/lib.rs b/crates/local-event-bus/src/lib.rs deleted file mode 100644 index ef9cddc..0000000 --- a/crates/local-event-bus/src/lib.rs +++ /dev/null @@ -1,140 +0,0 @@ -#![feature(async_fn_in_trait)] - -use std::future::Future; -use std::pin::Pin; -use std::sync::{Arc, RwLock}; -use std::task::{Context, Poll}; - -use async_std::io::ReadExt; -use async_std::task::{sleep, spawn}; -use event_bus_adapter::*; -use futures_util::AsyncWriteExt; -use tracing::{debug, error, warn}; - -pub struct MessageStream { - client: async_std::net::TcpStream, - connected: Arc>, -} - -impl futures::stream::Stream for MessageStream { - type Item = Message; - - fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { - let mut_self: &mut Self = unsafe { Pin::get_unchecked_mut(self) }; - - if !*mut_self.connected.read().unwrap() { - return Poll::Ready(None); - } - - const LEN_SIZE: usize = std::mem::size_of::(); - let mut len_buf = [0; LEN_SIZE]; - - let mut f = mut_self.client.read_exact(&mut len_buf); - let r = Pin::new(&mut f).poll(cx); - let len = match r { - Poll::Ready(Ok(())) => usize::from_le_bytes(len_buf), - Poll::Ready(Err(e)) => { - error!("Failed to read from message stream: {e}"); - return Poll::Ready(None); - } - Poll::Pending => return Poll::Pending, - }; - let mut buffer = vec![0; len]; - let mut f = mut_self.client.read_exact(&mut buffer[..len]); - let r = Pin::new(&mut f).poll(cx); - match r { - Poll::Ready(Ok(())) => match Message::from_bytes(&buffer[..]) { - Ok(msg) => Poll::Ready(Some(msg)), - _ => Poll::Ready(None), - }, - Poll::Ready(Err(e)) => { - error!("Failed to read from message stream: {e}"); - Poll::Ready(None) - } - Poll::Pending => Poll::Pending, - } - } -} - -#[derive(Debug, Clone)] -pub struct MessageSender { - client: async_std::net::TcpStream, - connected: Arc>, -} - -impl MessageSender { - pub async fn ack(&mut self) -> EBResult<()> { - self.send(Msg::Ack).await - } -} - -impl MessageSend for MessageSender { - async fn send(&mut self, msg: Msg) -> EBResult<()> { - if !*self.connected.read().unwrap() { - return Err(EBError::Closed); - } - let Ok(msg_buf) = msg.to_bytes() else { - return Err(EBError::SendFailed); - }; - let len = msg_buf.len(); - let mut len_buf = len.to_le_bytes().to_vec(); - len_buf.extend_from_slice(&msg_buf); - debug!("Sending {msg:?} with {len} as {len_buf:?}"); - // debug!("Parts {len_buf:?} {msg_buf:?}"); - - if let Err(e) = self.client.write(&len_buf).await { - warn!("Failed to write message {msg:?}: {e}"); - return Err(EBError::SendFailed); - } - // if let Err(e) = self.client.write(&v).await { - // warn!("Failed to write message {msg:?}: {e}"); - // return Err(EBError::SendFailed); - // } - Ok(()) - } -} - -#[derive(Debug, serde::Serialize, serde::Deserialize)] -pub struct LebConfig { - bind: String, - port: u16, -} - -pub struct LocalEventBus; - -impl EventBus for LocalEventBus { - async fn connect(config: Config) -> Result<(MessageStream, MessageSender), ()> { - let config: LebConfig = config.config().expect("Invalid Local Event Bus config"); - let client = async_std::net::TcpStream::connect(format!("{}:{}", config.bind, config.port)) - .await - .expect("Failed tp connect to event bus"); - client.set_nodelay(false).unwrap(); - - let connected = Arc::new(RwLock::new(true)); - let stream = MessageStream { - client: client.clone(), - connected: connected.clone(), - }; - let sender = MessageSender { - client, - connected: connected.clone(), - }; - - { - let connected = connected.clone(); - let mut sender = sender.clone(); - spawn(async move { - loop { - if sender.send(Msg::Pong).await.is_err() { - *connected.write().unwrap() = false; - break; - } else { - sleep(std::time::Duration::from_millis(300)).await; - } - } - }) - }; - - Ok((stream, sender)) - } -} diff --git a/crates/local-event-bus/src/main.rs b/crates/local-event-bus/src/main.rs deleted file mode 100644 index 500d0a6..0000000 --- a/crates/local-event-bus/src/main.rs +++ /dev/null @@ -1,332 +0,0 @@ -use std::collections::HashMap; -use std::net::Shutdown; -use std::sync::{Arc, RwLock}; - -use async_std::net::{TcpListener, TcpStream}; -use async_std::task::sleep; -use event_bus_adapter::*; -use flumedb::*; -use futures_util::{AsyncReadExt, AsyncWriteExt, StreamExt}; -use gumdrop::Options; -use tracing::{debug, error, info, warn}; -use tracing_subscriber::EnvFilter; -use uuid::Uuid; - -#[derive(Debug, thiserror::Error)] -enum Error { - #[error("Reserved")] - Reversed, - #[error("Client closed connection")] - BrokenPipe, -} - -#[derive(Options)] -struct Opts { - help: bool, - log_path: Option, - bind: Option, - port: Option, -} - -#[async_std::main] -async fn main() -> Result<(), Error> { - tracing_subscriber::fmt() - .with_env_filter(EnvFilter::from_default_env()) - .init(); - - let opts: Opts = Options::parse_args_default_or_exit(); - let path = opts - .log_path - .unwrap_or_else(|| std::env::var("LOG_PATH").expect("No path to save file")); - - let listener = TcpListener::bind(format!( - "{}:{}", - opts.bind - .unwrap_or_else(|| std::env::var("BIND").expect("No bind parameter")), - opts.port.unwrap_or_else(|| std::env::var("PORT") - .expect("No port parameter") - .parse() - .expect("Invalid port format. Expect number")) - )) - .await - .expect("Failed to start server"); - - let mut incoming = listener.incoming(); - - let clients = Arc::new(RwLock::new(HashMap::with_capacity(4086))); - let (tx, rx) = std::sync::mpsc::channel(); - - { - let clients = clients.clone(); - async_std::task::spawn(async move { - loop { - let Ok(msg) = rx.recv() else { - continue; - }; - match msg { - InnerMsg::Drop(uuid) => { - clients.write().unwrap().remove(&uuid); - } - InnerMsg::Register(client) => { - clients.write().unwrap().insert(client.id, client); - } - } - } - }); - } - - while let Some(stream) = incoming.next().await { - let path = path.clone(); - let tx = tx.clone(); - let clients = clients.clone(); - - async_std::task::spawn(async move { - let Ok(mut stream) = stream else { - return; - }; - stream.set_nodelay(false).unwrap(); - - let mut log = OffsetLog::::from_file( - std::fs::OpenOptions::new() - .append(true) - .create(true) - .write(true) - .read(true) - .open(&path) - .expect("Failed to open log file"), - ) - .expect("Failed to open log file"); - - let mut client = Client { - stream, - id: Uuid::new_v4(), - alive: Arc::new(RwLock::new(true)), - offset: None, - }; - let mut buffer = Vec::with_capacity(4086); - - if let Err(e) = tx.send(InnerMsg::Register(client.clone())) { - warn!("Failed to send register: {e}"); - } - - while client.is_alive() { - let Ok(Some(msg)) = read_msg(client.clone(), &mut buffer).await else { - continue; - }; - - match &msg { - Msg::Ping | Msg::Pong => { - if let Err(e) = client - .stream - .write_all(&Msg::Ping.to_bytes().unwrap_or_default()) - .await - { - warn!("Failed to write to client. Closing. {e}"); - sleep(std::time::Duration::from_millis(300)).await; - client.stream.close().await.ok(); - break; - } - } - Msg::Seek(offset) => { - let log_file = match OffsetLog::::open_read_only(&path) { - Ok(f) => f, - Err(e) => { - error!("Failed to open file for read: {e}"); - continue; - } - }; - let mut offset = (*offset) as u64; - - let iter = log_file.bidir_iter_at_offset(offset); - let mut iter = - iter.filter_map(|e| Msg::from_bytes(&e.data).ok().zip(Some(e.offset))); - - while let Some((msg, new_offset)) = iter.next() { - match send_directly(client.clone(), new_offset, msg).await { - Err(Error::BrokenPipe) => break, - Err(e) => { - warn!("Failed to send message: {e}"); - continue; - } - _ => { - if let Err(Error::BrokenPipe) = - wait_ack(client.clone(), &mut buffer).await - { - break; - } - offset = new_offset; - } - }; - } - client.offset = Some(Arc::new(RwLock::new(offset))); - } - _ => { - info!("Incoming message: {msg:?}"); - if client.offset.is_none() { - warn!("Offset is not set. Skipping..."); - continue; - } - let bytes = match msg.to_bytes() { - Ok(v) => v, - Err(e) => { - warn!("Failed to serialize message: {e}"); - break; - } - }; - debug!("Msg bytes {:?}", bytes.as_slice()); - let offset = match log.append(&bytes[..]) { - Ok(offset) => offset, - Err(e) => { - error!("Failed to write message to file: {e}"); - break; - } - }; - if let Err(e) = broadcast(clients.clone(), &mut buffer, offset, msg).await { - warn!("Failed to broadcast message: {e}"); - } - } - }; - } - - client.close(); - if let Err(e) = tx.send(InnerMsg::Drop(client.id)) { - warn!("Failed to send close client: {e}"); - } - }); - } - - Ok(()) -} - -async fn broadcast( - clients: Arc>>, - buffer: &mut Vec, - offset: u64, - msg: Msg, -) -> Result<(), Error> { - let clients = clients - .read() - .unwrap() - .values() - .filter(|c| *c.alive.read().unwrap()) - .map(Clone::clone) - .collect::>(); - for client in clients { - let id = client.id; - if let Err(e) = send_directly(client.clone(), offset, msg.clone()).await { - warn!("Failed to send message to {}: {e}", id); - } - if let Err(Error::BrokenPipe) = wait_ack(client, buffer).await { - break; - } - } - Ok(()) -} - -async fn send_directly(mut client: Client, offset: u64, msg: Msg) -> Result<(), Error> { - let msg_buf = match (Message { - offset, - payload: msg, - }) - .to_bytes() - { - Ok(v) => v, - Err(e) => { - warn!("Failed to serialize message: {e}"); - return Ok(()); - } - }; - let len = msg_buf.len(); - let mut len_buf = len.to_le_bytes().to_vec(); - len_buf.extend_from_slice(&msg_buf); - - if let Err(e) = client.stream.write(&len_buf).await { - warn!("Failed to write message to client: {e}"); - client.close(); - Err(Error::BrokenPipe) - } else { - Ok(()) - } -} - -async fn read_msg(mut client: Client, buffer: &mut Vec) -> Result, Error> { - const LEN_SIZE: usize = std::mem::size_of::(); - - let mut len_buf = [0; LEN_SIZE]; - let len = match AsyncReadExt::read_exact(&mut client.stream, &mut len_buf).await { - Ok(()) => { - // debug!("Received length bytes {len_buf:?}"); - usize::from_le_bytes(len_buf) - } - Err(e) if e.kind() == std::io::ErrorKind::UnexpectedEof => { - client.close(); - return Err(Error::BrokenPipe); - } - Err(e) => { - warn!("Failed to read msg len from client: {e}"); - return Err(Error::BrokenPipe); - } - }; - - buffer.clear(); - buffer.reserve(len); - buffer.resize(len, 0); - // debug!("Length is {len}"); - // debug!("FRAME: {len_buf:?} {buffer:?}"); - - let _l = match AsyncReadExt::read_exact(&mut client.stream, &mut buffer[..len]).await { - Ok(n) => n, - Err(e) => { - warn!("Failed to read from client: {e}"); - return Err(Error::BrokenPipe); - } - }; - // debug!("Incoming data: {len} {buffer:?}"); - match Msg::from_bytes(&buffer) { - Ok(msg) => { - if !matches!(msg, Msg::Pong) { - debug!("Message {msg:?}"); - } - Ok(Some(msg)) - } - Err(e) => { - warn!("Invalid incoming message {buffer:?}: {e}"); - return Ok(None); - } - } -} - -async fn wait_ack(client: Client, buffer: &mut Vec) -> Result<(), Error> { - loop { - buffer.clear(); - let msg = read_msg(client.clone(), buffer).await?; - if let Some(Msg::Ack) = msg { - break; - } - } - Ok(()) -} - -enum InnerMsg { - Register(Client), - Drop(Uuid), -} - -#[derive(Clone)] -struct Client { - stream: TcpStream, - id: Uuid, - alive: Arc>, - offset: Option>>, -} - -impl Client { - fn close(&mut self) { - *self.alive.write().unwrap() = false; - self.stream.shutdown(Shutdown::Both).ok(); - } - - fn is_alive(&self) -> bool { - *self.alive.read().unwrap() - } -}