Compare commits

..

3 Commits

8 changed files with 257 additions and 313 deletions

297
Cargo.lock generated
View File

@@ -663,12 +663,6 @@ dependencies = [
"shlex",
]
[[package]]
name = "cesu8"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
[[package]]
name = "cfg-if"
version = "1.0.4"
@@ -1750,6 +1744,8 @@ dependencies = [
"time",
"tokio",
"tokio-util",
"tokio-websockets 0.11.4",
"tokio-websockets 0.13.2",
"tracing",
"tracing-subscriber",
"twilight-gateway",
@@ -2806,50 +2802,6 @@ dependencies = [
"jiff-tzdb",
]
[[package]]
name = "jni"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
dependencies = [
"cesu8",
"cfg-if",
"combine",
"jni-sys 0.3.1",
"log",
"thiserror 1.0.69",
"walkdir",
"windows-sys 0.45.0",
]
[[package]]
name = "jni-sys"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
dependencies = [
"jni-sys 0.4.1",
]
[[package]]
name = "jni-sys"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
dependencies = [
"jni-sys-macros",
]
[[package]]
name = "jni-sys-macros"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
dependencies = [
"quote",
"syn 2.0.111",
]
[[package]]
name = "jobserver"
version = "0.1.34"
@@ -3706,7 +3658,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
[[package]]
name = "opendal"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"ctor",
"opendal-core",
@@ -3752,7 +3704,7 @@ dependencies = [
[[package]]
name = "opendal-core"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"anyhow",
"base64 0.22.1",
@@ -3768,7 +3720,7 @@ dependencies = [
"percent-encoding",
"quick-xml 0.38.4",
"reqsign-core",
"reqwest 0.13.2",
"reqwest",
"serde",
"serde_json",
"tokio",
@@ -3780,7 +3732,7 @@ dependencies = [
[[package]]
name = "opendal-layer-concurrent-limit"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"futures",
"http",
@@ -3791,7 +3743,7 @@ dependencies = [
[[package]]
name = "opendal-layer-logging"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"log",
"opendal-core",
@@ -3800,7 +3752,7 @@ dependencies = [
[[package]]
name = "opendal-layer-retry"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"backon",
"log",
@@ -3810,7 +3762,7 @@ dependencies = [
[[package]]
name = "opendal-layer-timeout"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"opendal-core",
"tokio",
@@ -3819,7 +3771,7 @@ dependencies = [
[[package]]
name = "opendal-service-aliyun-drive"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3833,7 +3785,7 @@ dependencies = [
[[package]]
name = "opendal-service-alluxio"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3846,7 +3798,7 @@ dependencies = [
[[package]]
name = "opendal-service-azblob"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -3866,7 +3818,7 @@ dependencies = [
[[package]]
name = "opendal-service-azdls"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3884,7 +3836,7 @@ dependencies = [
[[package]]
name = "opendal-service-azfile"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3901,7 +3853,7 @@ dependencies = [
[[package]]
name = "opendal-service-azure-common"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"http",
"opendal-core",
@@ -3910,7 +3862,7 @@ dependencies = [
[[package]]
name = "opendal-service-b2"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3924,7 +3876,7 @@ dependencies = [
[[package]]
name = "opendal-service-cacache"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"cacache",
@@ -3935,7 +3887,7 @@ dependencies = [
[[package]]
name = "opendal-service-d1"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3947,7 +3899,7 @@ dependencies = [
[[package]]
name = "opendal-service-dashmap"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"dashmap 6.1.0",
"log",
@@ -3958,7 +3910,7 @@ dependencies = [
[[package]]
name = "opendal-service-dbfs"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -3972,7 +3924,7 @@ dependencies = [
[[package]]
name = "opendal-service-dropbox"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -3985,7 +3937,7 @@ dependencies = [
[[package]]
name = "opendal-service-etcd"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"etcd-client",
"fastpool",
@@ -3997,7 +3949,7 @@ dependencies = [
[[package]]
name = "opendal-service-fs"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"log",
@@ -4010,7 +3962,7 @@ dependencies = [
[[package]]
name = "opendal-service-ftp"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"fastpool",
@@ -4028,7 +3980,7 @@ dependencies = [
[[package]]
name = "opendal-service-gcs"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"async-trait",
"bytes",
@@ -4048,7 +4000,7 @@ dependencies = [
[[package]]
name = "opendal-service-gdrive"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -4062,7 +4014,7 @@ dependencies = [
[[package]]
name = "opendal-service-ghac"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"ghac",
@@ -4081,7 +4033,7 @@ dependencies = [
[[package]]
name = "opendal-service-github"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -4095,7 +4047,7 @@ dependencies = [
[[package]]
name = "opendal-service-gridfs"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"futures",
"mea",
@@ -4107,7 +4059,7 @@ dependencies = [
[[package]]
name = "opendal-service-hdfs-native"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"futures",
@@ -4120,7 +4072,7 @@ dependencies = [
[[package]]
name = "opendal-service-ipmfs"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -4133,7 +4085,7 @@ dependencies = [
[[package]]
name = "opendal-service-mini-moka"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"log",
"mini-moka",
@@ -4144,7 +4096,7 @@ dependencies = [
[[package]]
name = "opendal-service-moka"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"log",
"moka",
@@ -4155,7 +4107,7 @@ dependencies = [
[[package]]
name = "opendal-service-mongodb"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"mea",
"mongodb",
@@ -4166,7 +4118,7 @@ dependencies = [
[[package]]
name = "opendal-service-mysql"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"mea",
"opendal-core",
@@ -4177,7 +4129,7 @@ dependencies = [
[[package]]
name = "opendal-service-pcloud"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"http",
@@ -4190,7 +4142,7 @@ dependencies = [
[[package]]
name = "opendal-service-persy"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"opendal-core",
"persy",
@@ -4200,7 +4152,7 @@ dependencies = [
[[package]]
name = "opendal-service-postgresql"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"mea",
"opendal-core",
@@ -4211,7 +4163,7 @@ dependencies = [
[[package]]
name = "opendal-service-redb"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"opendal-core",
"redb",
@@ -4221,7 +4173,7 @@ dependencies = [
[[package]]
name = "opendal-service-redis"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"bytes",
"fastpool",
@@ -4235,7 +4187,7 @@ dependencies = [
[[package]]
name = "opendal-service-s3"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"base64 0.22.1",
"bytes",
@@ -4255,7 +4207,7 @@ dependencies = [
[[package]]
name = "opendal-service-sled"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"opendal-core",
"serde",
@@ -4265,7 +4217,7 @@ dependencies = [
[[package]]
name = "opendal-service-webdav"
version = "0.55.0"
source = "git+https://github.com/apache/opendal#2f3b9807fcc7f5bd94edfd9a529be526b75ed459"
source = "git+https://github.com/apache/opendal?rev=ecf840b04afd2be109830b9978ba89759adfee79#ecf840b04afd2be109830b9978ba89759adfee79"
dependencies = [
"anyhow",
"bytes",
@@ -4955,7 +4907,6 @@ version = "0.11.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
dependencies = [
"aws-lc-rs",
"bytes",
"getrandom 0.3.4",
"lru-slab",
@@ -5369,49 +5320,11 @@ dependencies = [
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-streams 0.4.2",
"wasm-streams",
"web-sys",
"webpki-roots 1.0.4",
]
[[package]]
name = "reqwest"
version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801"
dependencies = [
"base64 0.22.1",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-body-util",
"hyper",
"hyper-rustls",
"hyper-util",
"js-sys",
"log",
"percent-encoding",
"pin-project-lite",
"quinn",
"rustls 0.23.35",
"rustls-pki-types",
"rustls-platform-verifier",
"sync_wrapper",
"tokio",
"tokio-rustls 0.26.4",
"tokio-util",
"tower",
"tower-http",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-streams 0.5.0",
"web-sys",
]
[[package]]
name = "resolv-conf"
version = "0.7.6"
@@ -5637,33 +5550,6 @@ dependencies = [
"zeroize",
]
[[package]]
name = "rustls-platform-verifier"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d99feebc72bae7ab76ba994bb5e121b8d83d910ca40b36e0921f53becc41784"
dependencies = [
"core-foundation",
"core-foundation-sys",
"jni",
"log",
"once_cell",
"rustls 0.23.35",
"rustls-native-certs",
"rustls-platform-verifier-android",
"rustls-webpki 0.103.8",
"security-framework",
"security-framework-sys",
"webpki-root-certs",
"windows-sys 0.61.2",
]
[[package]]
name = "rustls-platform-verifier-android"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
[[package]]
name = "rustls-webpki"
version = "0.102.8"
@@ -5974,7 +5860,7 @@ dependencies = [
"futures",
"mime_guess",
"percent-encoding",
"reqwest 0.12.28",
"reqwest",
"secrecy 0.8.0",
"serde",
"serde_cow",
@@ -6237,7 +6123,7 @@ dependencies = [
"parking_lot 0.12.5",
"pin-project",
"rand 0.9.2",
"reqwest 0.12.28",
"reqwest",
"ringbuf",
"rubato",
"rusty_pool",
@@ -6522,7 +6408,7 @@ dependencies = [
"futures-util",
"hls_m3u8",
"patricia_tree 0.8.0",
"reqwest 0.12.28",
"reqwest",
"tokio",
"tracing",
"url",
@@ -7013,6 +6899,7 @@ dependencies = [
"tokio",
"tokio-rustls 0.26.4",
"tokio-util",
"webpki-roots 0.26.11",
]
[[package]]
@@ -7726,19 +7613,6 @@ dependencies = [
"web-sys",
]
[[package]]
name = "wasm-streams"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb"
dependencies = [
"futures-util",
"js-sys",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
]
[[package]]
name = "wasmparser"
version = "0.244.0"
@@ -7771,15 +7645,6 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "webpki-root-certs"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "804f18a4ac2676ffb4e8b5b5fa9ae38af06df08162314f96a68d2a363e21a8ca"
dependencies = [
"rustls-pki-types",
]
[[package]]
name = "webpki-roots"
version = "0.26.11"
@@ -7956,15 +7821,6 @@ dependencies = [
"windows-link",
]
[[package]]
name = "windows-sys"
version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
dependencies = [
"windows-targets 0.42.2",
]
[[package]]
name = "windows-sys"
version = "0.48.0"
@@ -8001,21 +7857,6 @@ dependencies = [
"windows-link",
]
[[package]]
name = "windows-targets"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
dependencies = [
"windows_aarch64_gnullvm 0.42.2",
"windows_aarch64_msvc 0.42.2",
"windows_i686_gnu 0.42.2",
"windows_i686_msvc 0.42.2",
"windows_x86_64_gnu 0.42.2",
"windows_x86_64_gnullvm 0.42.2",
"windows_x86_64_msvc 0.42.2",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
@@ -8073,12 +7914,6 @@ dependencies = [
"windows-link",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
@@ -8097,12 +7932,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
@@ -8121,12 +7950,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
@@ -8157,12 +7980,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
@@ -8181,12 +7998,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
@@ -8205,12 +8016,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
@@ -8229,12 +8034,6 @@ version = "0.53.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"

175
src/bot_data.rs Normal file
View File

@@ -0,0 +1,175 @@
use async_compression::futures::{bufread::BrotliDecoder, write::BrotliEncoder};
use capnp::message::TypedBuilder;
use futures::{AsyncReadExt, AsyncWriteExt};
use opendal::Operator;
use snafu::{ResultExt as _, Snafu};
use crate::{OperatorExt, bot_capnp, option_ext::OptionExt as _};
#[derive(Debug, Clone)]
pub struct BotDataManager {
operator: Operator,
}
impl BotDataManager {
pub fn new(operator: Operator) -> Self {
Self { operator }
}
}
const PATH: &str = "data.bin.brotli";
#[derive(Debug, Snafu)]
#[snafu(module)]
pub enum WithError {
/// couldn't read data for this bot from the storage operator
ReadError { source: opendal::Error },
/// couldn't decompress the bot data from storage
DecompressionError { source: std::io::Error },
/// couldn't deserialize the bot data
DeserializeError { source: capnp::Error },
}
impl BotDataManager {
pub async fn with<R>(
&self,
f: impl FnOnce(bot_capnp::bot::Reader<'_>) -> R,
) -> Result<R, WithError> {
let compressed_buffer = self
.operator
.async_reader_if_exists(PATH)
.await
.context(with_error::ReadSnafu)?;
let decompressed_reader = compressed_buffer.map(BrotliDecoder::new);
let decompressed = decompressed_reader
.map_async(|mut reader| async move {
let mut vec = Vec::new();
reader.read_to_end(&mut vec).await?;
Ok(vec)
})
.await
.transpose()
.context(with_error::DecompressionSnafu)?;
let mut message = TypedBuilder::<bot_capnp::bot::Owned>::new_default();
let fallback = message.init_root();
let mut bot_data = fallback.into_reader();
let message_reader;
if let Some(mut bytes) = decompressed.as_deref() {
message_reader = capnp::serialize::read_message_from_flat_slice_no_alloc(
&mut bytes,
Default::default(),
)
.context(with_error::DeserializeSnafu)?;
bot_data = message_reader
.get_root()
.context(with_error::DeserializeSnafu)?;
}
Ok(f(bot_data))
}
}
#[derive(Debug, Snafu)]
#[snafu(module)]
pub enum UpdateError {
/// couldn't read data for this bot from the storage operator
ReadError { source: opendal::Error },
/// couldn't decompress the bot data from storage
DecompressionError { source: std::io::Error },
/// couldn't deserialize the bot data
DeserializeError { source: capnp::Error },
/// couldn't serialize the (modified) bot data
SerializeError { source: capnp::Error },
/// couldn't create a writer for this bot data in the storage operator
WriterError { source: opendal::Error },
/// couldn't write (modified) data for this bot to the storage operator
WriteError { source: std::io::Error },
/// couldn't finalize writing (modified) data for this bot to the storage operator
FinalizeError { source: std::io::Error },
}
impl BotDataManager {
pub async fn update<R>(
&self,
f: impl FnOnce(bot_capnp::bot::Builder<'_>) -> R,
) -> Result<R, UpdateError> {
let compressed_buffer = self
.operator
.async_reader_if_exists(PATH)
.await
.context(update_error::ReadSnafu)?;
let decompressed_reader = compressed_buffer.map(BrotliDecoder::new);
let decompressed = decompressed_reader
.map_async(|mut reader| async move {
let mut vec = Vec::new();
reader.read_to_end(&mut vec).await?;
Ok(vec)
})
.await
.transpose()
.context(update_error::DecompressionSnafu)?;
let mut message = TypedBuilder::<bot_capnp::bot::Owned>::new_default();
let ret = if let Some(mut bytes) = decompressed.as_deref() {
let message_reader = capnp::serialize::read_message_from_flat_slice_no_alloc(
&mut bytes,
Default::default(),
)
.context(update_error::DeserializeSnafu)?;
let bot_data = message_reader
.get_root()
.context(update_error::DeserializeSnafu)?;
message
.set_root(bot_data)
.context(update_error::DeserializeSnafu)?;
f(
message.get_root().unwrap(), // this is logically impossible
)
} else {
f(message.init_root())
};
let mut buffer = Vec::new();
capnp::serialize::write_message(&mut buffer, message.borrow_inner())
.context(update_error::SerializeSnafu)?;
let compressed_writer = self
.operator
.writer(PATH)
.await
.context(update_error::WriterSnafu)?
.into_futures_async_write();
let mut decompressed_writer = BrotliEncoder::new(compressed_writer);
decompressed_writer
.write_all(&buffer)
.await
.context(update_error::WriteSnafu)?;
decompressed_writer
.close()
.await
.context(update_error::FinalizeSnafu)?;
Ok(ret)
}
}

View File

@@ -1,10 +1,6 @@
use std::sync::LazyLock;
use async_compression::futures::bufread::BrotliDecoder;
use capnp::message::ReaderOptions;
use futures::{AsyncReadExt, TryStreamExt};
use opendal::ErrorKind;
use futures::TryStreamExt;
use snafu::{OptionExt, Snafu};
use std::sync::LazyLock;
use twilight_model::{
application::{
command::{Command, CommandType},
@@ -20,11 +16,10 @@ use twilight_util::builder::{
embed::{EmbedAuthorBuilder, EmbedBuilder, EmbedFieldBuilder},
};
use crate::{bot_capnp, command::State};
use crate::command::State;
const NAME: &str = "debug";
const DESCRIPTION: &str =
"(Only the bot owner can use this) Show various information for debugging purposes";
const NAME: &str = "info";
const DESCRIPTION: &str = "Show various information";
pub static COMMAND: LazyLock<Command> = LazyLock::new(|| {
CommandBuilder::new(NAME, DESCRIPTION, CommandType::ChatInput)
@@ -114,54 +109,22 @@ pub async fn handle(state: State, interaction: Interaction) {
.await
.expect("TODO");
let heat_script_description = {
let compressed_result = state
.bot_data
.reader("data.bin.brotli")
.await
.expect("TODO")
.into_futures_async_read(..)
.await;
let mut buf = Vec::default();
let mut message = capnp::message::TypedBuilder::<bot_capnp::bot::Owned>::new_default();
let fallback = message.init_root();
let message_reader;
let mut bot_data = fallback.into_reader();
match compressed_result {
Ok(compressed) => {
let mut decompressed = BrotliDecoder::new(compressed);
decompressed.read_to_end(&mut buf).await.expect("TODO");
message_reader =
capnp::serialize_packed::read_message(&*buf, ReaderOptions::default())
.expect("TODO");
bot_data = message_reader
.get_root::<bot_capnp::bot::Reader>()
.expect("TODO");
}
Err(error) if error.kind() == ErrorKind::NotFound => {
tracing::error!("TODO: proceeding with fallback");
}
Err(error) => {
tracing::error!(?error, "TODO");
return;
}
}
let heat_script_option = bot_data
.has_heat_script()
.then(|| bot_data.get_heat_script().expect("TODO"));
let heat_script_option =
heat_script_option.map(|heat_script| heat_script.to_str().expect("TODO"));
heat_script_option.map_or("none set yet".into(), |heat_script| {
format!("```\n{heat_script}\n```")
let heat_script_description = state
.bot_data_manager
.with(|bot_data| {
let heat_script_option = bot_data.has_heat_script().then(|| {
bot_data
.get_heat_script()
.expect("TODO")
.to_string()
.expect("TODO")
});
heat_script_option.map_or("none set yet".into(), |heat_script| {
format!("```\n{heat_script}\n```")
})
})
};
.await
.expect("TODO");
state
.discord_client

View File

@@ -16,9 +16,9 @@ use twilight_model::{
},
};
use crate::{GuildVoiceChannelToTextChannel, UserDataManager, VCs};
use crate::{BotDataManager, GuildVoiceChannelToTextChannel, UserDataManager, VCs};
pub mod debug;
pub mod info;
pub mod join;
pub mod leave;
pub mod opt_in;
@@ -28,7 +28,7 @@ pub mod opt_out;
pub struct State {
pub audio_channels: Channels,
pub audio_sample_rate: SampleRate,
pub bot_data: Operator,
pub bot_data_manager: BotDataManager,
pub cancellation_token: CancellationToken,
pub discord_application_id: Id<ApplicationMarker>,
pub discord_bot_owner_user_id: Id<UserMarker>,
@@ -58,7 +58,7 @@ where
pub fn all() -> Vec<(&'static Command, BoxedHandler)> {
vec![
(&debug::COMMAND, box_handler(debug::handle)),
(&info::COMMAND, box_handler(info::handle)),
(&join::COMMAND, box_handler(join::handle)),
(&leave::COMMAND, box_handler(leave::handle)),
(&opt_in::COMMAND, box_handler(opt_in::handle)),

View File

@@ -5,6 +5,7 @@ use twilight_model::{
command::{Command, CommandType},
interaction::Interaction,
},
channel::message::MessageFlags,
http::interaction::{InteractionResponse, InteractionResponseType},
};
use twilight_util::builder::{InteractionResponseDataBuilder, command::CommandBuilder};
@@ -79,6 +80,7 @@ pub async fn handle(state: State, interaction: Interaction) {
.content(format!(
"opted you in, your previous consent was {previous_consent:?}"
))
.flags(MessageFlags::EPHEMERAL)
.build(),
),
},

View File

@@ -5,6 +5,7 @@ use twilight_model::{
command::{Command, CommandType},
interaction::Interaction,
},
channel::message::MessageFlags,
http::interaction::{InteractionResponse, InteractionResponseType},
};
use twilight_util::builder::{InteractionResponseDataBuilder, command::CommandBuilder};
@@ -79,6 +80,7 @@ pub async fn handle(state: State, interaction: Interaction) {
.content(format!(
"opted you out, your previous consent was {previous_consent:?}"
))
.flags(MessageFlags::EPHEMERAL)
.build(),
),
},

View File

@@ -1,3 +1,4 @@
mod bot_data;
pub mod command;
mod one_to_many;
mod one_to_many_with_data;
@@ -11,6 +12,7 @@ mod vc_user;
capnp::generated_code!(mod bot_capnp);
capnp::generated_code!(mod user_capnp);
pub use bot_data::BotDataManager;
pub use command::{Router as CommandRouter, State, all as all_commands};
pub use one_to_many::OneToManyUniqueBTreeMap;
pub use one_to_many_with_data::OneToManyUniqueBTreeMapWithData;

View File

@@ -1,7 +1,7 @@
use clap::Parser;
use fomo_reducer::{
CommandRouter, GuildVoiceChannelToTextChannel, State, Storage, UserDataManager, all_commands,
command, initialize_vcs, update_vcs,
BotDataManager, CommandRouter, GuildVoiceChannelToTextChannel, State, Storage, UserDataManager,
all_commands, command, initialize_vcs, update_vcs,
};
use secrecy::{ExposeSecret, SecretString};
use snafu::{OptionExt, ResultExt, Snafu};
@@ -322,6 +322,7 @@ async fn main() -> Result<(), MainError> {
let recording_data = recording_data.into_inner();
let user_data = user_data.into_inner();
let bot_data_manager = BotDataManager::new(bot_data);
let user_data_manager = UserDataManager::new(user_data);
let discord_voice_channel_corresponding_text_channel = {
@@ -343,7 +344,7 @@ async fn main() -> Result<(), MainError> {
let state = State {
audio_channels,
audio_sample_rate,
bot_data,
bot_data_manager,
cancellation_token: cancellation_token.clone(),
discord_application_id,
discord_bot_owner_user_id,