├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md └── src ├── load_balancer.rs ├── main.rs └── rate_limiter.rs /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "ahash" 22 | version = "0.8.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 25 | dependencies = [ 26 | "cfg-if", 27 | "getrandom", 28 | "once_cell", 29 | "version_check", 30 | "zerocopy", 31 | ] 32 | 33 | [[package]] 34 | name = "aho-corasick" 35 | version = "1.1.3" 36 | source = "registry+https://github.com/rust-lang/crates.io-index" 37 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 38 | dependencies = [ 39 | "memchr", 40 | ] 41 | 42 | [[package]] 43 | name = "alloc-no-stdlib" 44 | version = "2.0.4" 45 | source = "registry+https://github.com/rust-lang/crates.io-index" 46 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 47 | 48 | [[package]] 49 | name = "alloc-stdlib" 50 | version = "0.2.2" 51 | source = "registry+https://github.com/rust-lang/crates.io-index" 52 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 53 | dependencies = [ 54 | "alloc-no-stdlib", 55 | ] 56 | 57 | [[package]] 58 | name = "allocator-api2" 59 | version = "0.2.21" 60 | source = "registry+https://github.com/rust-lang/crates.io-index" 61 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 62 | 63 | [[package]] 64 | name = "arc-swap" 65 | version = "1.7.1" 66 | source = "registry+https://github.com/rust-lang/crates.io-index" 67 | checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" 68 | 69 | [[package]] 70 | name = "arrayvec" 71 | version = "0.7.6" 72 | source = "registry+https://github.com/rust-lang/crates.io-index" 73 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 74 | 75 | [[package]] 76 | name = "async-stream" 77 | version = "0.3.6" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 80 | dependencies = [ 81 | "async-stream-impl", 82 | "futures-core", 83 | "pin-project-lite", 84 | ] 85 | 86 | [[package]] 87 | name = "async-stream-impl" 88 | version = "0.3.6" 89 | source = "registry+https://github.com/rust-lang/crates.io-index" 90 | checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 91 | dependencies = [ 92 | "proc-macro2", 93 | "quote", 94 | "syn 2.0.90", 95 | ] 96 | 97 | [[package]] 98 | name = "async-trait" 99 | version = "0.1.83" 100 | source = "registry+https://github.com/rust-lang/crates.io-index" 101 | checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" 102 | dependencies = [ 103 | "proc-macro2", 104 | "quote", 105 | "syn 2.0.90", 106 | ] 107 | 108 | [[package]] 109 | name = "atomic-waker" 110 | version = "1.1.2" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 113 | 114 | [[package]] 115 | name = "atty" 116 | version = "0.2.14" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 119 | dependencies = [ 120 | "hermit-abi", 121 | "libc", 122 | "winapi", 123 | ] 124 | 125 | [[package]] 126 | name = "autocfg" 127 | version = "1.4.0" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 130 | 131 | [[package]] 132 | name = "backtrace" 133 | version = "0.3.74" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 136 | dependencies = [ 137 | "addr2line", 138 | "cfg-if", 139 | "libc", 140 | "miniz_oxide", 141 | "object", 142 | "rustc-demangle", 143 | "windows-targets 0.52.6", 144 | ] 145 | 146 | [[package]] 147 | name = "base64" 148 | version = "0.21.7" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 151 | 152 | [[package]] 153 | name = "bitflags" 154 | version = "1.3.2" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 157 | 158 | [[package]] 159 | name = "bitflags" 160 | version = "2.6.0" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 163 | 164 | [[package]] 165 | name = "blake2" 166 | version = "0.10.6" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" 169 | dependencies = [ 170 | "digest", 171 | ] 172 | 173 | [[package]] 174 | name = "block-buffer" 175 | version = "0.10.4" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 178 | dependencies = [ 179 | "generic-array", 180 | ] 181 | 182 | [[package]] 183 | name = "brotli" 184 | version = "3.5.0" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" 187 | dependencies = [ 188 | "alloc-no-stdlib", 189 | "alloc-stdlib", 190 | "brotli-decompressor", 191 | ] 192 | 193 | [[package]] 194 | name = "brotli-decompressor" 195 | version = "2.5.1" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" 198 | dependencies = [ 199 | "alloc-no-stdlib", 200 | "alloc-stdlib", 201 | ] 202 | 203 | [[package]] 204 | name = "bumpalo" 205 | version = "3.16.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 208 | 209 | [[package]] 210 | name = "byteorder" 211 | version = "1.5.0" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 214 | 215 | [[package]] 216 | name = "bytes" 217 | version = "1.9.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 220 | 221 | [[package]] 222 | name = "cc" 223 | version = "1.2.3" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d" 226 | dependencies = [ 227 | "jobserver", 228 | "libc", 229 | "shlex", 230 | ] 231 | 232 | [[package]] 233 | name = "cfg-if" 234 | version = "1.0.0" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 237 | 238 | [[package]] 239 | name = "chrono" 240 | version = "0.4.39" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 243 | dependencies = [ 244 | "num-traits", 245 | ] 246 | 247 | [[package]] 248 | name = "clap" 249 | version = "3.2.25" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" 252 | dependencies = [ 253 | "atty", 254 | "bitflags 1.3.2", 255 | "clap_derive", 256 | "clap_lex", 257 | "indexmap 1.9.3", 258 | "once_cell", 259 | "strsim", 260 | "termcolor", 261 | "textwrap", 262 | ] 263 | 264 | [[package]] 265 | name = "clap_derive" 266 | version = "3.2.25" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" 269 | dependencies = [ 270 | "heck 0.4.1", 271 | "proc-macro-error", 272 | "proc-macro2", 273 | "quote", 274 | "syn 1.0.109", 275 | ] 276 | 277 | [[package]] 278 | name = "clap_lex" 279 | version = "0.2.4" 280 | source = "registry+https://github.com/rust-lang/crates.io-index" 281 | checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" 282 | dependencies = [ 283 | "os_str_bytes", 284 | ] 285 | 286 | [[package]] 287 | name = "cmake" 288 | version = "0.1.52" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" 291 | dependencies = [ 292 | "cc", 293 | ] 294 | 295 | [[package]] 296 | name = "core-foundation" 297 | version = "0.9.4" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 300 | dependencies = [ 301 | "core-foundation-sys", 302 | "libc", 303 | ] 304 | 305 | [[package]] 306 | name = "core-foundation-sys" 307 | version = "0.8.7" 308 | source = "registry+https://github.com/rust-lang/crates.io-index" 309 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 310 | 311 | [[package]] 312 | name = "crc32fast" 313 | version = "1.4.2" 314 | source = "registry+https://github.com/rust-lang/crates.io-index" 315 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 316 | dependencies = [ 317 | "cfg-if", 318 | ] 319 | 320 | [[package]] 321 | name = "crossbeam-channel" 322 | version = "0.5.13" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 325 | dependencies = [ 326 | "crossbeam-utils", 327 | ] 328 | 329 | [[package]] 330 | name = "crossbeam-queue" 331 | version = "0.3.11" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" 334 | dependencies = [ 335 | "crossbeam-utils", 336 | ] 337 | 338 | [[package]] 339 | name = "crossbeam-utils" 340 | version = "0.8.20" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 343 | 344 | [[package]] 345 | name = "crypto-common" 346 | version = "0.1.6" 347 | source = "registry+https://github.com/rust-lang/crates.io-index" 348 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 349 | dependencies = [ 350 | "generic-array", 351 | "typenum", 352 | ] 353 | 354 | [[package]] 355 | name = "daemonize" 356 | version = "0.5.0" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "ab8bfdaacb3c887a54d41bdf48d3af8873b3f5566469f8ba21b92057509f116e" 359 | dependencies = [ 360 | "libc", 361 | ] 362 | 363 | [[package]] 364 | name = "data-encoding" 365 | version = "2.6.0" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" 368 | 369 | [[package]] 370 | name = "debugid" 371 | version = "0.8.0" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" 374 | dependencies = [ 375 | "serde", 376 | "uuid", 377 | ] 378 | 379 | [[package]] 380 | name = "deranged" 381 | version = "0.3.11" 382 | source = "registry+https://github.com/rust-lang/crates.io-index" 383 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 384 | dependencies = [ 385 | "powerfmt", 386 | ] 387 | 388 | [[package]] 389 | name = "digest" 390 | version = "0.10.7" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 393 | dependencies = [ 394 | "block-buffer", 395 | "crypto-common", 396 | "subtle", 397 | ] 398 | 399 | [[package]] 400 | name = "displaydoc" 401 | version = "0.2.5" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 404 | dependencies = [ 405 | "proc-macro2", 406 | "quote", 407 | "syn 2.0.90", 408 | ] 409 | 410 | [[package]] 411 | name = "encoding_rs" 412 | version = "0.8.35" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 415 | dependencies = [ 416 | "cfg-if", 417 | ] 418 | 419 | [[package]] 420 | name = "equivalent" 421 | version = "1.0.1" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 424 | 425 | [[package]] 426 | name = "flate2" 427 | version = "1.0.35" 428 | source = "registry+https://github.com/rust-lang/crates.io-index" 429 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 430 | dependencies = [ 431 | "crc32fast", 432 | "libz-ng-sys", 433 | "miniz_oxide", 434 | ] 435 | 436 | [[package]] 437 | name = "fnv" 438 | version = "1.0.7" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 441 | 442 | [[package]] 443 | name = "foldhash" 444 | version = "0.1.3" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" 447 | 448 | [[package]] 449 | name = "foreign-types" 450 | version = "0.3.2" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 453 | dependencies = [ 454 | "foreign-types-shared", 455 | ] 456 | 457 | [[package]] 458 | name = "foreign-types-shared" 459 | version = "0.1.1" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 462 | 463 | [[package]] 464 | name = "form_urlencoded" 465 | version = "1.2.1" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 468 | dependencies = [ 469 | "percent-encoding", 470 | ] 471 | 472 | [[package]] 473 | name = "futures" 474 | version = "0.3.31" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 477 | dependencies = [ 478 | "futures-channel", 479 | "futures-core", 480 | "futures-executor", 481 | "futures-io", 482 | "futures-sink", 483 | "futures-task", 484 | "futures-util", 485 | ] 486 | 487 | [[package]] 488 | name = "futures-channel" 489 | version = "0.3.31" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 492 | dependencies = [ 493 | "futures-core", 494 | "futures-sink", 495 | ] 496 | 497 | [[package]] 498 | name = "futures-core" 499 | version = "0.3.31" 500 | source = "registry+https://github.com/rust-lang/crates.io-index" 501 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 502 | 503 | [[package]] 504 | name = "futures-executor" 505 | version = "0.3.31" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 508 | dependencies = [ 509 | "futures-core", 510 | "futures-task", 511 | "futures-util", 512 | ] 513 | 514 | [[package]] 515 | name = "futures-io" 516 | version = "0.3.31" 517 | source = "registry+https://github.com/rust-lang/crates.io-index" 518 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 519 | 520 | [[package]] 521 | name = "futures-macro" 522 | version = "0.3.31" 523 | source = "registry+https://github.com/rust-lang/crates.io-index" 524 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 525 | dependencies = [ 526 | "proc-macro2", 527 | "quote", 528 | "syn 2.0.90", 529 | ] 530 | 531 | [[package]] 532 | name = "futures-sink" 533 | version = "0.3.31" 534 | source = "registry+https://github.com/rust-lang/crates.io-index" 535 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 536 | 537 | [[package]] 538 | name = "futures-task" 539 | version = "0.3.31" 540 | source = "registry+https://github.com/rust-lang/crates.io-index" 541 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 542 | 543 | [[package]] 544 | name = "futures-util" 545 | version = "0.3.31" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 548 | dependencies = [ 549 | "futures-channel", 550 | "futures-core", 551 | "futures-io", 552 | "futures-macro", 553 | "futures-sink", 554 | "futures-task", 555 | "memchr", 556 | "pin-project-lite", 557 | "pin-utils", 558 | "slab", 559 | ] 560 | 561 | [[package]] 562 | name = "generic-array" 563 | version = "0.14.7" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 566 | dependencies = [ 567 | "typenum", 568 | "version_check", 569 | ] 570 | 571 | [[package]] 572 | name = "getrandom" 573 | version = "0.2.15" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 576 | dependencies = [ 577 | "cfg-if", 578 | "libc", 579 | "wasi", 580 | ] 581 | 582 | [[package]] 583 | name = "gimli" 584 | version = "0.31.1" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 587 | 588 | [[package]] 589 | name = "h2" 590 | version = "0.3.26" 591 | source = "registry+https://github.com/rust-lang/crates.io-index" 592 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 593 | dependencies = [ 594 | "bytes", 595 | "fnv", 596 | "futures-core", 597 | "futures-sink", 598 | "futures-util", 599 | "http 0.2.12", 600 | "indexmap 2.7.0", 601 | "slab", 602 | "tokio", 603 | "tokio-util", 604 | "tracing", 605 | ] 606 | 607 | [[package]] 608 | name = "h2" 609 | version = "0.4.7" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e" 612 | dependencies = [ 613 | "atomic-waker", 614 | "bytes", 615 | "fnv", 616 | "futures-core", 617 | "futures-sink", 618 | "http 1.2.0", 619 | "indexmap 2.7.0", 620 | "slab", 621 | "tokio", 622 | "tokio-util", 623 | "tracing", 624 | ] 625 | 626 | [[package]] 627 | name = "hashbrown" 628 | version = "0.12.3" 629 | source = "registry+https://github.com/rust-lang/crates.io-index" 630 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 631 | 632 | [[package]] 633 | name = "hashbrown" 634 | version = "0.15.2" 635 | source = "registry+https://github.com/rust-lang/crates.io-index" 636 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 637 | dependencies = [ 638 | "allocator-api2", 639 | "equivalent", 640 | "foldhash", 641 | ] 642 | 643 | [[package]] 644 | name = "heck" 645 | version = "0.4.1" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 648 | 649 | [[package]] 650 | name = "heck" 651 | version = "0.5.0" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 654 | 655 | [[package]] 656 | name = "hermit-abi" 657 | version = "0.1.19" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 660 | dependencies = [ 661 | "libc", 662 | ] 663 | 664 | [[package]] 665 | name = "hex" 666 | version = "0.4.3" 667 | source = "registry+https://github.com/rust-lang/crates.io-index" 668 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 669 | 670 | [[package]] 671 | name = "hostname" 672 | version = "0.3.1" 673 | source = "registry+https://github.com/rust-lang/crates.io-index" 674 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 675 | dependencies = [ 676 | "libc", 677 | "match_cfg", 678 | "winapi", 679 | ] 680 | 681 | [[package]] 682 | name = "http" 683 | version = "0.2.12" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 686 | dependencies = [ 687 | "bytes", 688 | "fnv", 689 | "itoa", 690 | ] 691 | 692 | [[package]] 693 | name = "http" 694 | version = "1.2.0" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 697 | dependencies = [ 698 | "bytes", 699 | "fnv", 700 | "itoa", 701 | ] 702 | 703 | [[package]] 704 | name = "http-body" 705 | version = "0.4.6" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 708 | dependencies = [ 709 | "bytes", 710 | "http 0.2.12", 711 | "pin-project-lite", 712 | ] 713 | 714 | [[package]] 715 | name = "httparse" 716 | version = "1.9.5" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 719 | 720 | [[package]] 721 | name = "httpdate" 722 | version = "1.0.3" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 725 | 726 | [[package]] 727 | name = "hyper" 728 | version = "0.14.31" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" 731 | dependencies = [ 732 | "bytes", 733 | "futures-channel", 734 | "futures-core", 735 | "futures-util", 736 | "h2 0.3.26", 737 | "http 0.2.12", 738 | "http-body", 739 | "httparse", 740 | "httpdate", 741 | "itoa", 742 | "pin-project-lite", 743 | "socket2", 744 | "tokio", 745 | "tower-service", 746 | "tracing", 747 | "want", 748 | ] 749 | 750 | [[package]] 751 | name = "hyper-rustls" 752 | version = "0.24.2" 753 | source = "registry+https://github.com/rust-lang/crates.io-index" 754 | checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" 755 | dependencies = [ 756 | "futures-util", 757 | "http 0.2.12", 758 | "hyper", 759 | "rustls", 760 | "tokio", 761 | "tokio-rustls", 762 | ] 763 | 764 | [[package]] 765 | name = "icu_collections" 766 | version = "1.5.0" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 769 | dependencies = [ 770 | "displaydoc", 771 | "yoke", 772 | "zerofrom", 773 | "zerovec", 774 | ] 775 | 776 | [[package]] 777 | name = "icu_locid" 778 | version = "1.5.0" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 781 | dependencies = [ 782 | "displaydoc", 783 | "litemap", 784 | "tinystr", 785 | "writeable", 786 | "zerovec", 787 | ] 788 | 789 | [[package]] 790 | name = "icu_locid_transform" 791 | version = "1.5.0" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 794 | dependencies = [ 795 | "displaydoc", 796 | "icu_locid", 797 | "icu_locid_transform_data", 798 | "icu_provider", 799 | "tinystr", 800 | "zerovec", 801 | ] 802 | 803 | [[package]] 804 | name = "icu_locid_transform_data" 805 | version = "1.5.0" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 808 | 809 | [[package]] 810 | name = "icu_normalizer" 811 | version = "1.5.0" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 814 | dependencies = [ 815 | "displaydoc", 816 | "icu_collections", 817 | "icu_normalizer_data", 818 | "icu_properties", 819 | "icu_provider", 820 | "smallvec", 821 | "utf16_iter", 822 | "utf8_iter", 823 | "write16", 824 | "zerovec", 825 | ] 826 | 827 | [[package]] 828 | name = "icu_normalizer_data" 829 | version = "1.5.0" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 832 | 833 | [[package]] 834 | name = "icu_properties" 835 | version = "1.5.1" 836 | source = "registry+https://github.com/rust-lang/crates.io-index" 837 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 838 | dependencies = [ 839 | "displaydoc", 840 | "icu_collections", 841 | "icu_locid_transform", 842 | "icu_properties_data", 843 | "icu_provider", 844 | "tinystr", 845 | "zerovec", 846 | ] 847 | 848 | [[package]] 849 | name = "icu_properties_data" 850 | version = "1.5.0" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 853 | 854 | [[package]] 855 | name = "icu_provider" 856 | version = "1.5.0" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 859 | dependencies = [ 860 | "displaydoc", 861 | "icu_locid", 862 | "icu_provider_macros", 863 | "stable_deref_trait", 864 | "tinystr", 865 | "writeable", 866 | "yoke", 867 | "zerofrom", 868 | "zerovec", 869 | ] 870 | 871 | [[package]] 872 | name = "icu_provider_macros" 873 | version = "1.5.0" 874 | source = "registry+https://github.com/rust-lang/crates.io-index" 875 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 876 | dependencies = [ 877 | "proc-macro2", 878 | "quote", 879 | "syn 2.0.90", 880 | ] 881 | 882 | [[package]] 883 | name = "idna" 884 | version = "1.0.3" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 887 | dependencies = [ 888 | "idna_adapter", 889 | "smallvec", 890 | "utf8_iter", 891 | ] 892 | 893 | [[package]] 894 | name = "idna_adapter" 895 | version = "1.2.0" 896 | source = "registry+https://github.com/rust-lang/crates.io-index" 897 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 898 | dependencies = [ 899 | "icu_normalizer", 900 | "icu_properties", 901 | ] 902 | 903 | [[package]] 904 | name = "indexmap" 905 | version = "1.9.3" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 908 | dependencies = [ 909 | "autocfg", 910 | "hashbrown 0.12.3", 911 | ] 912 | 913 | [[package]] 914 | name = "indexmap" 915 | version = "2.7.0" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" 918 | dependencies = [ 919 | "equivalent", 920 | "hashbrown 0.15.2", 921 | ] 922 | 923 | [[package]] 924 | name = "ipnet" 925 | version = "2.10.1" 926 | source = "registry+https://github.com/rust-lang/crates.io-index" 927 | checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" 928 | 929 | [[package]] 930 | name = "itoa" 931 | version = "1.0.14" 932 | source = "registry+https://github.com/rust-lang/crates.io-index" 933 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 934 | 935 | [[package]] 936 | name = "jobserver" 937 | version = "0.1.32" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 940 | dependencies = [ 941 | "libc", 942 | ] 943 | 944 | [[package]] 945 | name = "js-sys" 946 | version = "0.3.76" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 949 | dependencies = [ 950 | "once_cell", 951 | "wasm-bindgen", 952 | ] 953 | 954 | [[package]] 955 | name = "lazy_static" 956 | version = "1.5.0" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 959 | 960 | [[package]] 961 | name = "libc" 962 | version = "0.2.168" 963 | source = "registry+https://github.com/rust-lang/crates.io-index" 964 | checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" 965 | 966 | [[package]] 967 | name = "libz-ng-sys" 968 | version = "1.1.20" 969 | source = "registry+https://github.com/rust-lang/crates.io-index" 970 | checksum = "8f0f7295a34685977acb2e8cc8b08ee4a8dffd6cf278eeccddbe1ed55ba815d5" 971 | dependencies = [ 972 | "cmake", 973 | "libc", 974 | ] 975 | 976 | [[package]] 977 | name = "linked-hash-map" 978 | version = "0.5.6" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 981 | 982 | [[package]] 983 | name = "litemap" 984 | version = "0.7.4" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 987 | 988 | [[package]] 989 | name = "lock_api" 990 | version = "0.4.12" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 993 | dependencies = [ 994 | "autocfg", 995 | "scopeguard", 996 | ] 997 | 998 | [[package]] 999 | name = "log" 1000 | version = "0.4.22" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1003 | 1004 | [[package]] 1005 | name = "lru" 1006 | version = "0.12.5" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 1009 | dependencies = [ 1010 | "hashbrown 0.15.2", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "match_cfg" 1015 | version = "0.1.0" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1018 | 1019 | [[package]] 1020 | name = "memchr" 1021 | version = "2.7.4" 1022 | source = "registry+https://github.com/rust-lang/crates.io-index" 1023 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1024 | 1025 | [[package]] 1026 | name = "memoffset" 1027 | version = "0.6.5" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" 1030 | dependencies = [ 1031 | "autocfg", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "mime" 1036 | version = "0.3.17" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1039 | 1040 | [[package]] 1041 | name = "miniz_oxide" 1042 | version = "0.8.0" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 1045 | dependencies = [ 1046 | "adler2", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "mio" 1051 | version = "1.0.3" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1054 | dependencies = [ 1055 | "libc", 1056 | "wasi", 1057 | "windows-sys 0.52.0", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "nix" 1062 | version = "0.24.3" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" 1065 | dependencies = [ 1066 | "bitflags 1.3.2", 1067 | "cfg-if", 1068 | "libc", 1069 | "memoffset", 1070 | ] 1071 | 1072 | [[package]] 1073 | name = "num-conv" 1074 | version = "0.1.0" 1075 | source = "registry+https://github.com/rust-lang/crates.io-index" 1076 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1077 | 1078 | [[package]] 1079 | name = "num-traits" 1080 | version = "0.2.19" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1083 | dependencies = [ 1084 | "autocfg", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "object" 1089 | version = "0.36.5" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1092 | dependencies = [ 1093 | "memchr", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "once_cell" 1098 | version = "1.20.2" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1101 | 1102 | [[package]] 1103 | name = "openssl" 1104 | version = "0.10.68" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" 1107 | dependencies = [ 1108 | "bitflags 2.6.0", 1109 | "cfg-if", 1110 | "foreign-types", 1111 | "libc", 1112 | "once_cell", 1113 | "openssl-macros", 1114 | "openssl-sys", 1115 | ] 1116 | 1117 | [[package]] 1118 | name = "openssl-macros" 1119 | version = "0.1.1" 1120 | source = "registry+https://github.com/rust-lang/crates.io-index" 1121 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1122 | dependencies = [ 1123 | "proc-macro2", 1124 | "quote", 1125 | "syn 2.0.90", 1126 | ] 1127 | 1128 | [[package]] 1129 | name = "openssl-probe" 1130 | version = "0.1.5" 1131 | source = "registry+https://github.com/rust-lang/crates.io-index" 1132 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1133 | 1134 | [[package]] 1135 | name = "openssl-src" 1136 | version = "300.4.1+3.4.0" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "faa4eac4138c62414b5622d1b31c5c304f34b406b013c079c2bbc652fdd6678c" 1139 | dependencies = [ 1140 | "cc", 1141 | ] 1142 | 1143 | [[package]] 1144 | name = "openssl-sys" 1145 | version = "0.9.104" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" 1148 | dependencies = [ 1149 | "cc", 1150 | "libc", 1151 | "openssl-src", 1152 | "pkg-config", 1153 | "vcpkg", 1154 | ] 1155 | 1156 | [[package]] 1157 | name = "os_str_bytes" 1158 | version = "6.6.1" 1159 | source = "registry+https://github.com/rust-lang/crates.io-index" 1160 | checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" 1161 | 1162 | [[package]] 1163 | name = "parking_lot" 1164 | version = "0.12.3" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1167 | dependencies = [ 1168 | "lock_api", 1169 | "parking_lot_core", 1170 | ] 1171 | 1172 | [[package]] 1173 | name = "parking_lot_core" 1174 | version = "0.9.10" 1175 | source = "registry+https://github.com/rust-lang/crates.io-index" 1176 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1177 | dependencies = [ 1178 | "cfg-if", 1179 | "libc", 1180 | "redox_syscall", 1181 | "smallvec", 1182 | "windows-targets 0.52.6", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "paste" 1187 | version = "1.0.15" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1190 | 1191 | [[package]] 1192 | name = "percent-encoding" 1193 | version = "2.3.1" 1194 | source = "registry+https://github.com/rust-lang/crates.io-index" 1195 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1196 | 1197 | [[package]] 1198 | name = "pin-project-lite" 1199 | version = "0.2.15" 1200 | source = "registry+https://github.com/rust-lang/crates.io-index" 1201 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 1202 | 1203 | [[package]] 1204 | name = "pin-utils" 1205 | version = "0.1.0" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1208 | 1209 | [[package]] 1210 | name = "pingora" 1211 | version = "0.3.0" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "9144f4950d87291365ca24e41b9a149bd38515d562a7464a6fd27ac12ca0874e" 1214 | dependencies = [ 1215 | "pingora-cache", 1216 | "pingora-core", 1217 | "pingora-http", 1218 | "pingora-load-balancing", 1219 | "pingora-proxy", 1220 | "pingora-timeout", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "pingora-cache" 1225 | version = "0.3.0" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "dbe55bddb694583a9db101e5ae5b31f570f2ccce312ac7d64c2e4a430510c4b3" 1228 | dependencies = [ 1229 | "ahash", 1230 | "async-trait", 1231 | "blake2", 1232 | "bytes", 1233 | "hex", 1234 | "http 1.2.0", 1235 | "httparse", 1236 | "httpdate", 1237 | "indexmap 1.9.3", 1238 | "log", 1239 | "lru", 1240 | "once_cell", 1241 | "parking_lot", 1242 | "pingora-core", 1243 | "pingora-error", 1244 | "pingora-header-serde", 1245 | "pingora-http", 1246 | "pingora-lru", 1247 | "pingora-timeout", 1248 | "regex", 1249 | "rmp", 1250 | "rmp-serde", 1251 | "rustracing", 1252 | "rustracing_jaeger", 1253 | "serde", 1254 | "tokio", 1255 | ] 1256 | 1257 | [[package]] 1258 | name = "pingora-core" 1259 | version = "0.3.0" 1260 | source = "registry+https://github.com/rust-lang/crates.io-index" 1261 | checksum = "51dbd9509e3bb25a699bee76ba1befbffb4e733694d7e682d4bfe35a1a48cbb4" 1262 | dependencies = [ 1263 | "ahash", 1264 | "async-trait", 1265 | "brotli", 1266 | "bytes", 1267 | "chrono", 1268 | "clap", 1269 | "daemonize", 1270 | "flate2", 1271 | "futures", 1272 | "h2 0.4.7", 1273 | "http 1.2.0", 1274 | "httparse", 1275 | "httpdate", 1276 | "libc", 1277 | "log", 1278 | "lru", 1279 | "nix", 1280 | "once_cell", 1281 | "openssl-probe", 1282 | "parking_lot", 1283 | "percent-encoding", 1284 | "pingora-error", 1285 | "pingora-http", 1286 | "pingora-openssl", 1287 | "pingora-pool", 1288 | "pingora-runtime", 1289 | "pingora-timeout", 1290 | "prometheus", 1291 | "rand", 1292 | "regex", 1293 | "sentry", 1294 | "serde", 1295 | "serde_yaml", 1296 | "sfv", 1297 | "socket2", 1298 | "strum", 1299 | "strum_macros", 1300 | "thread_local", 1301 | "tokio", 1302 | "tokio-test", 1303 | "unicase", 1304 | "zstd", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "pingora-error" 1309 | version = "0.3.0" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "8e39924926e498ddb0e64a642b6c5df56627afc0989b0f7be197eb096f998f0f" 1312 | 1313 | [[package]] 1314 | name = "pingora-header-serde" 1315 | version = "0.3.0" 1316 | source = "registry+https://github.com/rust-lang/crates.io-index" 1317 | checksum = "37a4c91b93ffaf066443aca3ac669909695b7e93049482bb6c32125ba3366571" 1318 | dependencies = [ 1319 | "bytes", 1320 | "http 1.2.0", 1321 | "httparse", 1322 | "pingora-error", 1323 | "pingora-http", 1324 | "thread_local", 1325 | "zstd", 1326 | "zstd-safe", 1327 | ] 1328 | 1329 | [[package]] 1330 | name = "pingora-http" 1331 | version = "0.3.0" 1332 | source = "registry+https://github.com/rust-lang/crates.io-index" 1333 | checksum = "88243a433347f328442842d9596dfde5b8b171daaee4a3b16cbe74db033ef4cd" 1334 | dependencies = [ 1335 | "bytes", 1336 | "http 1.2.0", 1337 | "pingora-error", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "pingora-ketama" 1342 | version = "0.3.0" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "324f14c8f90a534ce55c11dcbc88428f60a2540265f50b5ee7010561f45dd006" 1345 | dependencies = [ 1346 | "crc32fast", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "pingora-limits" 1351 | version = "0.3.0" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "9c9c71547553d90e99407e6a7304e41190019ec723c6bc36528225e17adfdf0b" 1354 | dependencies = [ 1355 | "ahash", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "pingora-load-balancing" 1360 | version = "0.3.0" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "d58b52ccfec1b55d8d903d3f78d9bb7f96115fae78065f500cb126758cc85f41" 1363 | dependencies = [ 1364 | "arc-swap", 1365 | "async-trait", 1366 | "fnv", 1367 | "futures", 1368 | "log", 1369 | "pingora-core", 1370 | "pingora-error", 1371 | "pingora-http", 1372 | "pingora-ketama", 1373 | "pingora-runtime", 1374 | "rand", 1375 | "tokio", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "pingora-lru" 1380 | version = "0.3.0" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "9bb8f0df84b4b9afd63742c78e6c4b39413554f857e7d41502825e4ff9798e3e" 1383 | dependencies = [ 1384 | "arrayvec", 1385 | "hashbrown 0.15.2", 1386 | "parking_lot", 1387 | "rand", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "pingora-openssl" 1392 | version = "0.3.0" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "4bbfc0c9d7f066a6e284dfef736e3bbfee07f1cc6e27c7a6bbd2ea6a45862932" 1395 | dependencies = [ 1396 | "foreign-types", 1397 | "libc", 1398 | "openssl", 1399 | "openssl-src", 1400 | "openssl-sys", 1401 | "tokio-openssl", 1402 | ] 1403 | 1404 | [[package]] 1405 | name = "pingora-pool" 1406 | version = "0.3.0" 1407 | source = "registry+https://github.com/rust-lang/crates.io-index" 1408 | checksum = "7d10a7b0e4115c8098e454d77a96d8ac3d89cc9a95910a6ef10f2656160d463a" 1409 | dependencies = [ 1410 | "crossbeam-queue", 1411 | "log", 1412 | "lru", 1413 | "parking_lot", 1414 | "pingora-timeout", 1415 | "thread_local", 1416 | "tokio", 1417 | ] 1418 | 1419 | [[package]] 1420 | name = "pingora-proxy" 1421 | version = "0.3.0" 1422 | source = "registry+https://github.com/rust-lang/crates.io-index" 1423 | checksum = "333b96aff8d7c30f04f21e3e338ba5854d66df00a7cbe437dbb35a857b84e298" 1424 | dependencies = [ 1425 | "async-trait", 1426 | "bytes", 1427 | "clap", 1428 | "futures", 1429 | "h2 0.4.7", 1430 | "http 1.2.0", 1431 | "log", 1432 | "once_cell", 1433 | "pingora-cache", 1434 | "pingora-core", 1435 | "pingora-error", 1436 | "pingora-http", 1437 | "pingora-timeout", 1438 | "regex", 1439 | "tokio", 1440 | ] 1441 | 1442 | [[package]] 1443 | name = "pingora-runtime" 1444 | version = "0.3.0" 1445 | source = "registry+https://github.com/rust-lang/crates.io-index" 1446 | checksum = "2f1c3302dec37b0e8916b0f637852f1e56450b7dafe6042f014343bc3cf12995" 1447 | dependencies = [ 1448 | "once_cell", 1449 | "rand", 1450 | "thread_local", 1451 | "tokio", 1452 | ] 1453 | 1454 | [[package]] 1455 | name = "pingora-timeout" 1456 | version = "0.3.0" 1457 | source = "registry+https://github.com/rust-lang/crates.io-index" 1458 | checksum = "56f54daa3e32391201cfabde4dc1c2ecdfa60b4d6695ef47df56f42c55792ee3" 1459 | dependencies = [ 1460 | "futures", 1461 | "once_cell", 1462 | "parking_lot", 1463 | "pin-project-lite", 1464 | "thread_local", 1465 | "tokio", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "pkg-config" 1470 | version = "0.3.31" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1473 | 1474 | [[package]] 1475 | name = "powerfmt" 1476 | version = "0.2.0" 1477 | source = "registry+https://github.com/rust-lang/crates.io-index" 1478 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1479 | 1480 | [[package]] 1481 | name = "ppv-lite86" 1482 | version = "0.2.20" 1483 | source = "registry+https://github.com/rust-lang/crates.io-index" 1484 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1485 | dependencies = [ 1486 | "zerocopy", 1487 | ] 1488 | 1489 | [[package]] 1490 | name = "proc-macro-error" 1491 | version = "1.0.4" 1492 | source = "registry+https://github.com/rust-lang/crates.io-index" 1493 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1494 | dependencies = [ 1495 | "proc-macro-error-attr", 1496 | "proc-macro2", 1497 | "quote", 1498 | "syn 1.0.109", 1499 | "version_check", 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "proc-macro-error-attr" 1504 | version = "1.0.4" 1505 | source = "registry+https://github.com/rust-lang/crates.io-index" 1506 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1507 | dependencies = [ 1508 | "proc-macro2", 1509 | "quote", 1510 | "version_check", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "proc-macro2" 1515 | version = "1.0.92" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 1518 | dependencies = [ 1519 | "unicode-ident", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "prometheus" 1524 | version = "0.13.4" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" 1527 | dependencies = [ 1528 | "cfg-if", 1529 | "fnv", 1530 | "lazy_static", 1531 | "memchr", 1532 | "parking_lot", 1533 | "protobuf", 1534 | "thiserror", 1535 | ] 1536 | 1537 | [[package]] 1538 | name = "protobuf" 1539 | version = "2.28.0" 1540 | source = "registry+https://github.com/rust-lang/crates.io-index" 1541 | checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" 1542 | 1543 | [[package]] 1544 | name = "quote" 1545 | version = "1.0.37" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1548 | dependencies = [ 1549 | "proc-macro2", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "rand" 1554 | version = "0.8.5" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1557 | dependencies = [ 1558 | "libc", 1559 | "rand_chacha", 1560 | "rand_core", 1561 | ] 1562 | 1563 | [[package]] 1564 | name = "rand_chacha" 1565 | version = "0.3.1" 1566 | source = "registry+https://github.com/rust-lang/crates.io-index" 1567 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1568 | dependencies = [ 1569 | "ppv-lite86", 1570 | "rand_core", 1571 | ] 1572 | 1573 | [[package]] 1574 | name = "rand_core" 1575 | version = "0.6.4" 1576 | source = "registry+https://github.com/rust-lang/crates.io-index" 1577 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1578 | dependencies = [ 1579 | "getrandom", 1580 | ] 1581 | 1582 | [[package]] 1583 | name = "redox_syscall" 1584 | version = "0.5.8" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1587 | dependencies = [ 1588 | "bitflags 2.6.0", 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "regex" 1593 | version = "1.11.1" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1596 | dependencies = [ 1597 | "aho-corasick", 1598 | "memchr", 1599 | "regex-automata", 1600 | "regex-syntax", 1601 | ] 1602 | 1603 | [[package]] 1604 | name = "regex-automata" 1605 | version = "0.4.9" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1608 | dependencies = [ 1609 | "aho-corasick", 1610 | "memchr", 1611 | "regex-syntax", 1612 | ] 1613 | 1614 | [[package]] 1615 | name = "regex-syntax" 1616 | version = "0.8.5" 1617 | source = "registry+https://github.com/rust-lang/crates.io-index" 1618 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1619 | 1620 | [[package]] 1621 | name = "reqwest" 1622 | version = "0.11.27" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 1625 | dependencies = [ 1626 | "base64", 1627 | "bytes", 1628 | "encoding_rs", 1629 | "futures-core", 1630 | "futures-util", 1631 | "h2 0.3.26", 1632 | "http 0.2.12", 1633 | "http-body", 1634 | "hyper", 1635 | "hyper-rustls", 1636 | "ipnet", 1637 | "js-sys", 1638 | "log", 1639 | "mime", 1640 | "once_cell", 1641 | "percent-encoding", 1642 | "pin-project-lite", 1643 | "rustls", 1644 | "rustls-pemfile", 1645 | "serde", 1646 | "serde_json", 1647 | "serde_urlencoded", 1648 | "sync_wrapper", 1649 | "system-configuration", 1650 | "tokio", 1651 | "tokio-rustls", 1652 | "tower-service", 1653 | "url", 1654 | "wasm-bindgen", 1655 | "wasm-bindgen-futures", 1656 | "web-sys", 1657 | "webpki-roots", 1658 | "winreg", 1659 | ] 1660 | 1661 | [[package]] 1662 | name = "reverse-proxy" 1663 | version = "0.1.0" 1664 | dependencies = [ 1665 | "async-trait", 1666 | "once_cell", 1667 | "pingora", 1668 | "pingora-core", 1669 | "pingora-limits", 1670 | "pingora-load-balancing", 1671 | "pingora-proxy", 1672 | ] 1673 | 1674 | [[package]] 1675 | name = "ring" 1676 | version = "0.17.8" 1677 | source = "registry+https://github.com/rust-lang/crates.io-index" 1678 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 1679 | dependencies = [ 1680 | "cc", 1681 | "cfg-if", 1682 | "getrandom", 1683 | "libc", 1684 | "spin", 1685 | "untrusted", 1686 | "windows-sys 0.52.0", 1687 | ] 1688 | 1689 | [[package]] 1690 | name = "rmp" 1691 | version = "0.8.14" 1692 | source = "registry+https://github.com/rust-lang/crates.io-index" 1693 | checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" 1694 | dependencies = [ 1695 | "byteorder", 1696 | "num-traits", 1697 | "paste", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "rmp-serde" 1702 | version = "1.3.0" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" 1705 | dependencies = [ 1706 | "byteorder", 1707 | "rmp", 1708 | "serde", 1709 | ] 1710 | 1711 | [[package]] 1712 | name = "rust_decimal" 1713 | version = "1.36.0" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" 1716 | dependencies = [ 1717 | "arrayvec", 1718 | "num-traits", 1719 | ] 1720 | 1721 | [[package]] 1722 | name = "rustc-demangle" 1723 | version = "0.1.24" 1724 | source = "registry+https://github.com/rust-lang/crates.io-index" 1725 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1726 | 1727 | [[package]] 1728 | name = "rustc_version" 1729 | version = "0.4.1" 1730 | source = "registry+https://github.com/rust-lang/crates.io-index" 1731 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 1732 | dependencies = [ 1733 | "semver", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "rustls" 1738 | version = "0.21.12" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 1741 | dependencies = [ 1742 | "log", 1743 | "ring", 1744 | "rustls-webpki", 1745 | "sct", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "rustls-pemfile" 1750 | version = "1.0.4" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 1753 | dependencies = [ 1754 | "base64", 1755 | ] 1756 | 1757 | [[package]] 1758 | name = "rustls-webpki" 1759 | version = "0.101.7" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 1762 | dependencies = [ 1763 | "ring", 1764 | "untrusted", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "rustracing" 1769 | version = "0.5.1" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "a44822b10c095e574869de2b891e40c724fef42cadaea040d1cd3bdbb13d36a5" 1772 | dependencies = [ 1773 | "backtrace", 1774 | "crossbeam-channel", 1775 | "rand", 1776 | "trackable 0.2.24", 1777 | ] 1778 | 1779 | [[package]] 1780 | name = "rustracing_jaeger" 1781 | version = "0.7.0" 1782 | source = "registry+https://github.com/rust-lang/crates.io-index" 1783 | checksum = "a6c2fe9411ef5f43ac773f0e84ad735804c55719346a7aad52de2d9162db97c8" 1784 | dependencies = [ 1785 | "crossbeam-channel", 1786 | "hostname", 1787 | "percent-encoding", 1788 | "rand", 1789 | "rustracing", 1790 | "thrift_codec", 1791 | "trackable 0.2.24", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "rustversion" 1796 | version = "1.0.18" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" 1799 | 1800 | [[package]] 1801 | name = "ryu" 1802 | version = "1.0.18" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1805 | 1806 | [[package]] 1807 | name = "scopeguard" 1808 | version = "1.2.0" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1811 | 1812 | [[package]] 1813 | name = "sct" 1814 | version = "0.7.1" 1815 | source = "registry+https://github.com/rust-lang/crates.io-index" 1816 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 1817 | dependencies = [ 1818 | "ring", 1819 | "untrusted", 1820 | ] 1821 | 1822 | [[package]] 1823 | name = "semver" 1824 | version = "1.0.23" 1825 | source = "registry+https://github.com/rust-lang/crates.io-index" 1826 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 1827 | 1828 | [[package]] 1829 | name = "sentry" 1830 | version = "0.26.0" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "904eca4fb30c6112a1dae60c0a9e29cfb42f42129da4260f1ee20e94151b62e3" 1833 | dependencies = [ 1834 | "httpdate", 1835 | "reqwest", 1836 | "sentry-backtrace", 1837 | "sentry-contexts", 1838 | "sentry-core", 1839 | "sentry-panic", 1840 | "tokio", 1841 | ] 1842 | 1843 | [[package]] 1844 | name = "sentry-backtrace" 1845 | version = "0.26.0" 1846 | source = "registry+https://github.com/rust-lang/crates.io-index" 1847 | checksum = "1671189d1b759879fa4bdde46c50a499abb14332ed81f84fc6f60658f41b2fdb" 1848 | dependencies = [ 1849 | "backtrace", 1850 | "lazy_static", 1851 | "regex", 1852 | "sentry-core", 1853 | ] 1854 | 1855 | [[package]] 1856 | name = "sentry-contexts" 1857 | version = "0.26.0" 1858 | source = "registry+https://github.com/rust-lang/crates.io-index" 1859 | checksum = "db80ceff16bb1a4b2689b8758e5e61e405fc4d8ff9f2d1b5b845b76ce37fa34e" 1860 | dependencies = [ 1861 | "hostname", 1862 | "libc", 1863 | "rustc_version", 1864 | "sentry-core", 1865 | "uname", 1866 | ] 1867 | 1868 | [[package]] 1869 | name = "sentry-core" 1870 | version = "0.26.0" 1871 | source = "registry+https://github.com/rust-lang/crates.io-index" 1872 | checksum = "6c9f509d3959ed4dbbd80ca42572caad682aaa1cdd92c719e0815d0e87f82c96" 1873 | dependencies = [ 1874 | "lazy_static", 1875 | "rand", 1876 | "sentry-types", 1877 | "serde", 1878 | "serde_json", 1879 | ] 1880 | 1881 | [[package]] 1882 | name = "sentry-panic" 1883 | version = "0.26.0" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "f8b442769cc34115f64393f7bfe4f863c3c38749e0c0b9613a7ae25b37c7ba53" 1886 | dependencies = [ 1887 | "sentry-backtrace", 1888 | "sentry-core", 1889 | ] 1890 | 1891 | [[package]] 1892 | name = "sentry-types" 1893 | version = "0.26.0" 1894 | source = "registry+https://github.com/rust-lang/crates.io-index" 1895 | checksum = "254b600e93e9ef00a48382c9f1e86d27884bd9a5489efa4eb9210c20c72e88a6" 1896 | dependencies = [ 1897 | "debugid", 1898 | "getrandom", 1899 | "hex", 1900 | "serde", 1901 | "serde_json", 1902 | "thiserror", 1903 | "time", 1904 | "url", 1905 | "uuid", 1906 | ] 1907 | 1908 | [[package]] 1909 | name = "serde" 1910 | version = "1.0.216" 1911 | source = "registry+https://github.com/rust-lang/crates.io-index" 1912 | checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" 1913 | dependencies = [ 1914 | "serde_derive", 1915 | ] 1916 | 1917 | [[package]] 1918 | name = "serde_derive" 1919 | version = "1.0.216" 1920 | source = "registry+https://github.com/rust-lang/crates.io-index" 1921 | checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" 1922 | dependencies = [ 1923 | "proc-macro2", 1924 | "quote", 1925 | "syn 2.0.90", 1926 | ] 1927 | 1928 | [[package]] 1929 | name = "serde_json" 1930 | version = "1.0.133" 1931 | source = "registry+https://github.com/rust-lang/crates.io-index" 1932 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 1933 | dependencies = [ 1934 | "itoa", 1935 | "memchr", 1936 | "ryu", 1937 | "serde", 1938 | ] 1939 | 1940 | [[package]] 1941 | name = "serde_urlencoded" 1942 | version = "0.7.1" 1943 | source = "registry+https://github.com/rust-lang/crates.io-index" 1944 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1945 | dependencies = [ 1946 | "form_urlencoded", 1947 | "itoa", 1948 | "ryu", 1949 | "serde", 1950 | ] 1951 | 1952 | [[package]] 1953 | name = "serde_yaml" 1954 | version = "0.8.26" 1955 | source = "registry+https://github.com/rust-lang/crates.io-index" 1956 | checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" 1957 | dependencies = [ 1958 | "indexmap 1.9.3", 1959 | "ryu", 1960 | "serde", 1961 | "yaml-rust", 1962 | ] 1963 | 1964 | [[package]] 1965 | name = "sfv" 1966 | version = "0.9.4" 1967 | source = "registry+https://github.com/rust-lang/crates.io-index" 1968 | checksum = "f27daf6ed3fc7ffd5ea3ce9f684fe351c47e50f2fdbb6236e2bad0b440dbe408" 1969 | dependencies = [ 1970 | "data-encoding", 1971 | "indexmap 2.7.0", 1972 | "rust_decimal", 1973 | ] 1974 | 1975 | [[package]] 1976 | name = "shlex" 1977 | version = "1.3.0" 1978 | source = "registry+https://github.com/rust-lang/crates.io-index" 1979 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1980 | 1981 | [[package]] 1982 | name = "signal-hook-registry" 1983 | version = "1.4.2" 1984 | source = "registry+https://github.com/rust-lang/crates.io-index" 1985 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1986 | dependencies = [ 1987 | "libc", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "slab" 1992 | version = "0.4.9" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1995 | dependencies = [ 1996 | "autocfg", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "smallvec" 2001 | version = "1.13.2" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 2004 | 2005 | [[package]] 2006 | name = "socket2" 2007 | version = "0.5.8" 2008 | source = "registry+https://github.com/rust-lang/crates.io-index" 2009 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 2010 | dependencies = [ 2011 | "libc", 2012 | "windows-sys 0.52.0", 2013 | ] 2014 | 2015 | [[package]] 2016 | name = "spin" 2017 | version = "0.9.8" 2018 | source = "registry+https://github.com/rust-lang/crates.io-index" 2019 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 2020 | 2021 | [[package]] 2022 | name = "stable_deref_trait" 2023 | version = "1.2.0" 2024 | source = "registry+https://github.com/rust-lang/crates.io-index" 2025 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2026 | 2027 | [[package]] 2028 | name = "strsim" 2029 | version = "0.10.0" 2030 | source = "registry+https://github.com/rust-lang/crates.io-index" 2031 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" 2032 | 2033 | [[package]] 2034 | name = "strum" 2035 | version = "0.26.3" 2036 | source = "registry+https://github.com/rust-lang/crates.io-index" 2037 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2038 | 2039 | [[package]] 2040 | name = "strum_macros" 2041 | version = "0.26.4" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2044 | dependencies = [ 2045 | "heck 0.5.0", 2046 | "proc-macro2", 2047 | "quote", 2048 | "rustversion", 2049 | "syn 2.0.90", 2050 | ] 2051 | 2052 | [[package]] 2053 | name = "subtle" 2054 | version = "2.6.1" 2055 | source = "registry+https://github.com/rust-lang/crates.io-index" 2056 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2057 | 2058 | [[package]] 2059 | name = "syn" 2060 | version = "1.0.109" 2061 | source = "registry+https://github.com/rust-lang/crates.io-index" 2062 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2063 | dependencies = [ 2064 | "proc-macro2", 2065 | "quote", 2066 | "unicode-ident", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "syn" 2071 | version = "2.0.90" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" 2074 | dependencies = [ 2075 | "proc-macro2", 2076 | "quote", 2077 | "unicode-ident", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "sync_wrapper" 2082 | version = "0.1.2" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2085 | 2086 | [[package]] 2087 | name = "synstructure" 2088 | version = "0.13.1" 2089 | source = "registry+https://github.com/rust-lang/crates.io-index" 2090 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2091 | dependencies = [ 2092 | "proc-macro2", 2093 | "quote", 2094 | "syn 2.0.90", 2095 | ] 2096 | 2097 | [[package]] 2098 | name = "system-configuration" 2099 | version = "0.5.1" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 2102 | dependencies = [ 2103 | "bitflags 1.3.2", 2104 | "core-foundation", 2105 | "system-configuration-sys", 2106 | ] 2107 | 2108 | [[package]] 2109 | name = "system-configuration-sys" 2110 | version = "0.5.0" 2111 | source = "registry+https://github.com/rust-lang/crates.io-index" 2112 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 2113 | dependencies = [ 2114 | "core-foundation-sys", 2115 | "libc", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "termcolor" 2120 | version = "1.4.1" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2123 | dependencies = [ 2124 | "winapi-util", 2125 | ] 2126 | 2127 | [[package]] 2128 | name = "textwrap" 2129 | version = "0.16.1" 2130 | source = "registry+https://github.com/rust-lang/crates.io-index" 2131 | checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" 2132 | 2133 | [[package]] 2134 | name = "thiserror" 2135 | version = "1.0.69" 2136 | source = "registry+https://github.com/rust-lang/crates.io-index" 2137 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2138 | dependencies = [ 2139 | "thiserror-impl", 2140 | ] 2141 | 2142 | [[package]] 2143 | name = "thiserror-impl" 2144 | version = "1.0.69" 2145 | source = "registry+https://github.com/rust-lang/crates.io-index" 2146 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2147 | dependencies = [ 2148 | "proc-macro2", 2149 | "quote", 2150 | "syn 2.0.90", 2151 | ] 2152 | 2153 | [[package]] 2154 | name = "thread_local" 2155 | version = "1.1.8" 2156 | source = "registry+https://github.com/rust-lang/crates.io-index" 2157 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 2158 | dependencies = [ 2159 | "cfg-if", 2160 | "once_cell", 2161 | ] 2162 | 2163 | [[package]] 2164 | name = "thrift_codec" 2165 | version = "0.1.1" 2166 | source = "registry+https://github.com/rust-lang/crates.io-index" 2167 | checksum = "8fb61fb3d0a0af14949f3a6949b2639112e13226647112824f4d081533f9b1a8" 2168 | dependencies = [ 2169 | "byteorder", 2170 | "trackable 0.2.24", 2171 | ] 2172 | 2173 | [[package]] 2174 | name = "time" 2175 | version = "0.3.37" 2176 | source = "registry+https://github.com/rust-lang/crates.io-index" 2177 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 2178 | dependencies = [ 2179 | "deranged", 2180 | "itoa", 2181 | "num-conv", 2182 | "powerfmt", 2183 | "serde", 2184 | "time-core", 2185 | "time-macros", 2186 | ] 2187 | 2188 | [[package]] 2189 | name = "time-core" 2190 | version = "0.1.2" 2191 | source = "registry+https://github.com/rust-lang/crates.io-index" 2192 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2193 | 2194 | [[package]] 2195 | name = "time-macros" 2196 | version = "0.2.19" 2197 | source = "registry+https://github.com/rust-lang/crates.io-index" 2198 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 2199 | dependencies = [ 2200 | "num-conv", 2201 | "time-core", 2202 | ] 2203 | 2204 | [[package]] 2205 | name = "tinystr" 2206 | version = "0.7.6" 2207 | source = "registry+https://github.com/rust-lang/crates.io-index" 2208 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2209 | dependencies = [ 2210 | "displaydoc", 2211 | "zerovec", 2212 | ] 2213 | 2214 | [[package]] 2215 | name = "tokio" 2216 | version = "1.42.0" 2217 | source = "registry+https://github.com/rust-lang/crates.io-index" 2218 | checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" 2219 | dependencies = [ 2220 | "backtrace", 2221 | "bytes", 2222 | "libc", 2223 | "mio", 2224 | "pin-project-lite", 2225 | "signal-hook-registry", 2226 | "socket2", 2227 | "tokio-macros", 2228 | "windows-sys 0.52.0", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "tokio-macros" 2233 | version = "2.4.0" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 2236 | dependencies = [ 2237 | "proc-macro2", 2238 | "quote", 2239 | "syn 2.0.90", 2240 | ] 2241 | 2242 | [[package]] 2243 | name = "tokio-openssl" 2244 | version = "0.6.5" 2245 | source = "registry+https://github.com/rust-lang/crates.io-index" 2246 | checksum = "59df6849caa43bb7567f9a36f863c447d95a11d5903c9cc334ba32576a27eadd" 2247 | dependencies = [ 2248 | "openssl", 2249 | "openssl-sys", 2250 | "tokio", 2251 | ] 2252 | 2253 | [[package]] 2254 | name = "tokio-rustls" 2255 | version = "0.24.1" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" 2258 | dependencies = [ 2259 | "rustls", 2260 | "tokio", 2261 | ] 2262 | 2263 | [[package]] 2264 | name = "tokio-stream" 2265 | version = "0.1.17" 2266 | source = "registry+https://github.com/rust-lang/crates.io-index" 2267 | checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 2268 | dependencies = [ 2269 | "futures-core", 2270 | "pin-project-lite", 2271 | "tokio", 2272 | ] 2273 | 2274 | [[package]] 2275 | name = "tokio-test" 2276 | version = "0.4.4" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" 2279 | dependencies = [ 2280 | "async-stream", 2281 | "bytes", 2282 | "futures-core", 2283 | "tokio", 2284 | "tokio-stream", 2285 | ] 2286 | 2287 | [[package]] 2288 | name = "tokio-util" 2289 | version = "0.7.13" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2292 | dependencies = [ 2293 | "bytes", 2294 | "futures-core", 2295 | "futures-sink", 2296 | "pin-project-lite", 2297 | "tokio", 2298 | ] 2299 | 2300 | [[package]] 2301 | name = "tower-service" 2302 | version = "0.3.3" 2303 | source = "registry+https://github.com/rust-lang/crates.io-index" 2304 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2305 | 2306 | [[package]] 2307 | name = "tracing" 2308 | version = "0.1.41" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2311 | dependencies = [ 2312 | "pin-project-lite", 2313 | "tracing-core", 2314 | ] 2315 | 2316 | [[package]] 2317 | name = "tracing-core" 2318 | version = "0.1.33" 2319 | source = "registry+https://github.com/rust-lang/crates.io-index" 2320 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2321 | dependencies = [ 2322 | "once_cell", 2323 | ] 2324 | 2325 | [[package]] 2326 | name = "trackable" 2327 | version = "0.2.24" 2328 | source = "registry+https://github.com/rust-lang/crates.io-index" 2329 | checksum = "b98abb9e7300b9ac902cc04920945a874c1973e08c310627cc4458c04b70dd32" 2330 | dependencies = [ 2331 | "trackable 1.3.0", 2332 | "trackable_derive", 2333 | ] 2334 | 2335 | [[package]] 2336 | name = "trackable" 2337 | version = "1.3.0" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "b15bd114abb99ef8cee977e517c8f37aee63f184f2d08e3e6ceca092373369ae" 2340 | dependencies = [ 2341 | "trackable_derive", 2342 | ] 2343 | 2344 | [[package]] 2345 | name = "trackable_derive" 2346 | version = "1.0.0" 2347 | source = "registry+https://github.com/rust-lang/crates.io-index" 2348 | checksum = "ebeb235c5847e2f82cfe0f07eb971d1e5f6804b18dac2ae16349cc604380f82f" 2349 | dependencies = [ 2350 | "quote", 2351 | "syn 1.0.109", 2352 | ] 2353 | 2354 | [[package]] 2355 | name = "try-lock" 2356 | version = "0.2.5" 2357 | source = "registry+https://github.com/rust-lang/crates.io-index" 2358 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2359 | 2360 | [[package]] 2361 | name = "typenum" 2362 | version = "1.17.0" 2363 | source = "registry+https://github.com/rust-lang/crates.io-index" 2364 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2365 | 2366 | [[package]] 2367 | name = "uname" 2368 | version = "0.1.1" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" 2371 | dependencies = [ 2372 | "libc", 2373 | ] 2374 | 2375 | [[package]] 2376 | name = "unicase" 2377 | version = "2.8.0" 2378 | source = "registry+https://github.com/rust-lang/crates.io-index" 2379 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 2380 | 2381 | [[package]] 2382 | name = "unicode-ident" 2383 | version = "1.0.14" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2386 | 2387 | [[package]] 2388 | name = "untrusted" 2389 | version = "0.9.0" 2390 | source = "registry+https://github.com/rust-lang/crates.io-index" 2391 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2392 | 2393 | [[package]] 2394 | name = "url" 2395 | version = "2.5.4" 2396 | source = "registry+https://github.com/rust-lang/crates.io-index" 2397 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2398 | dependencies = [ 2399 | "form_urlencoded", 2400 | "idna", 2401 | "percent-encoding", 2402 | "serde", 2403 | ] 2404 | 2405 | [[package]] 2406 | name = "utf16_iter" 2407 | version = "1.0.5" 2408 | source = "registry+https://github.com/rust-lang/crates.io-index" 2409 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2410 | 2411 | [[package]] 2412 | name = "utf8_iter" 2413 | version = "1.0.4" 2414 | source = "registry+https://github.com/rust-lang/crates.io-index" 2415 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2416 | 2417 | [[package]] 2418 | name = "uuid" 2419 | version = "1.11.0" 2420 | source = "registry+https://github.com/rust-lang/crates.io-index" 2421 | checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" 2422 | dependencies = [ 2423 | "getrandom", 2424 | "serde", 2425 | ] 2426 | 2427 | [[package]] 2428 | name = "vcpkg" 2429 | version = "0.2.15" 2430 | source = "registry+https://github.com/rust-lang/crates.io-index" 2431 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2432 | 2433 | [[package]] 2434 | name = "version_check" 2435 | version = "0.9.5" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2438 | 2439 | [[package]] 2440 | name = "want" 2441 | version = "0.3.1" 2442 | source = "registry+https://github.com/rust-lang/crates.io-index" 2443 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2444 | dependencies = [ 2445 | "try-lock", 2446 | ] 2447 | 2448 | [[package]] 2449 | name = "wasi" 2450 | version = "0.11.0+wasi-snapshot-preview1" 2451 | source = "registry+https://github.com/rust-lang/crates.io-index" 2452 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2453 | 2454 | [[package]] 2455 | name = "wasm-bindgen" 2456 | version = "0.2.99" 2457 | source = "registry+https://github.com/rust-lang/crates.io-index" 2458 | checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" 2459 | dependencies = [ 2460 | "cfg-if", 2461 | "once_cell", 2462 | "wasm-bindgen-macro", 2463 | ] 2464 | 2465 | [[package]] 2466 | name = "wasm-bindgen-backend" 2467 | version = "0.2.99" 2468 | source = "registry+https://github.com/rust-lang/crates.io-index" 2469 | checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" 2470 | dependencies = [ 2471 | "bumpalo", 2472 | "log", 2473 | "proc-macro2", 2474 | "quote", 2475 | "syn 2.0.90", 2476 | "wasm-bindgen-shared", 2477 | ] 2478 | 2479 | [[package]] 2480 | name = "wasm-bindgen-futures" 2481 | version = "0.4.49" 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" 2483 | checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" 2484 | dependencies = [ 2485 | "cfg-if", 2486 | "js-sys", 2487 | "once_cell", 2488 | "wasm-bindgen", 2489 | "web-sys", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "wasm-bindgen-macro" 2494 | version = "0.2.99" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" 2497 | dependencies = [ 2498 | "quote", 2499 | "wasm-bindgen-macro-support", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "wasm-bindgen-macro-support" 2504 | version = "0.2.99" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" 2507 | dependencies = [ 2508 | "proc-macro2", 2509 | "quote", 2510 | "syn 2.0.90", 2511 | "wasm-bindgen-backend", 2512 | "wasm-bindgen-shared", 2513 | ] 2514 | 2515 | [[package]] 2516 | name = "wasm-bindgen-shared" 2517 | version = "0.2.99" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" 2520 | 2521 | [[package]] 2522 | name = "web-sys" 2523 | version = "0.3.76" 2524 | source = "registry+https://github.com/rust-lang/crates.io-index" 2525 | checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" 2526 | dependencies = [ 2527 | "js-sys", 2528 | "wasm-bindgen", 2529 | ] 2530 | 2531 | [[package]] 2532 | name = "webpki-roots" 2533 | version = "0.25.4" 2534 | source = "registry+https://github.com/rust-lang/crates.io-index" 2535 | checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 2536 | 2537 | [[package]] 2538 | name = "winapi" 2539 | version = "0.3.9" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2542 | dependencies = [ 2543 | "winapi-i686-pc-windows-gnu", 2544 | "winapi-x86_64-pc-windows-gnu", 2545 | ] 2546 | 2547 | [[package]] 2548 | name = "winapi-i686-pc-windows-gnu" 2549 | version = "0.4.0" 2550 | source = "registry+https://github.com/rust-lang/crates.io-index" 2551 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2552 | 2553 | [[package]] 2554 | name = "winapi-util" 2555 | version = "0.1.9" 2556 | source = "registry+https://github.com/rust-lang/crates.io-index" 2557 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2558 | dependencies = [ 2559 | "windows-sys 0.59.0", 2560 | ] 2561 | 2562 | [[package]] 2563 | name = "winapi-x86_64-pc-windows-gnu" 2564 | version = "0.4.0" 2565 | source = "registry+https://github.com/rust-lang/crates.io-index" 2566 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2567 | 2568 | [[package]] 2569 | name = "windows-sys" 2570 | version = "0.48.0" 2571 | source = "registry+https://github.com/rust-lang/crates.io-index" 2572 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2573 | dependencies = [ 2574 | "windows-targets 0.48.5", 2575 | ] 2576 | 2577 | [[package]] 2578 | name = "windows-sys" 2579 | version = "0.52.0" 2580 | source = "registry+https://github.com/rust-lang/crates.io-index" 2581 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2582 | dependencies = [ 2583 | "windows-targets 0.52.6", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "windows-sys" 2588 | version = "0.59.0" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2591 | dependencies = [ 2592 | "windows-targets 0.52.6", 2593 | ] 2594 | 2595 | [[package]] 2596 | name = "windows-targets" 2597 | version = "0.48.5" 2598 | source = "registry+https://github.com/rust-lang/crates.io-index" 2599 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2600 | dependencies = [ 2601 | "windows_aarch64_gnullvm 0.48.5", 2602 | "windows_aarch64_msvc 0.48.5", 2603 | "windows_i686_gnu 0.48.5", 2604 | "windows_i686_msvc 0.48.5", 2605 | "windows_x86_64_gnu 0.48.5", 2606 | "windows_x86_64_gnullvm 0.48.5", 2607 | "windows_x86_64_msvc 0.48.5", 2608 | ] 2609 | 2610 | [[package]] 2611 | name = "windows-targets" 2612 | version = "0.52.6" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2615 | dependencies = [ 2616 | "windows_aarch64_gnullvm 0.52.6", 2617 | "windows_aarch64_msvc 0.52.6", 2618 | "windows_i686_gnu 0.52.6", 2619 | "windows_i686_gnullvm", 2620 | "windows_i686_msvc 0.52.6", 2621 | "windows_x86_64_gnu 0.52.6", 2622 | "windows_x86_64_gnullvm 0.52.6", 2623 | "windows_x86_64_msvc 0.52.6", 2624 | ] 2625 | 2626 | [[package]] 2627 | name = "windows_aarch64_gnullvm" 2628 | version = "0.48.5" 2629 | source = "registry+https://github.com/rust-lang/crates.io-index" 2630 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2631 | 2632 | [[package]] 2633 | name = "windows_aarch64_gnullvm" 2634 | version = "0.52.6" 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" 2636 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2637 | 2638 | [[package]] 2639 | name = "windows_aarch64_msvc" 2640 | version = "0.48.5" 2641 | source = "registry+https://github.com/rust-lang/crates.io-index" 2642 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2643 | 2644 | [[package]] 2645 | name = "windows_aarch64_msvc" 2646 | version = "0.52.6" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2649 | 2650 | [[package]] 2651 | name = "windows_i686_gnu" 2652 | version = "0.48.5" 2653 | source = "registry+https://github.com/rust-lang/crates.io-index" 2654 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2655 | 2656 | [[package]] 2657 | name = "windows_i686_gnu" 2658 | version = "0.52.6" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2661 | 2662 | [[package]] 2663 | name = "windows_i686_gnullvm" 2664 | version = "0.52.6" 2665 | source = "registry+https://github.com/rust-lang/crates.io-index" 2666 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2667 | 2668 | [[package]] 2669 | name = "windows_i686_msvc" 2670 | version = "0.48.5" 2671 | source = "registry+https://github.com/rust-lang/crates.io-index" 2672 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2673 | 2674 | [[package]] 2675 | name = "windows_i686_msvc" 2676 | version = "0.52.6" 2677 | source = "registry+https://github.com/rust-lang/crates.io-index" 2678 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2679 | 2680 | [[package]] 2681 | name = "windows_x86_64_gnu" 2682 | version = "0.48.5" 2683 | source = "registry+https://github.com/rust-lang/crates.io-index" 2684 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2685 | 2686 | [[package]] 2687 | name = "windows_x86_64_gnu" 2688 | version = "0.52.6" 2689 | source = "registry+https://github.com/rust-lang/crates.io-index" 2690 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2691 | 2692 | [[package]] 2693 | name = "windows_x86_64_gnullvm" 2694 | version = "0.48.5" 2695 | source = "registry+https://github.com/rust-lang/crates.io-index" 2696 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2697 | 2698 | [[package]] 2699 | name = "windows_x86_64_gnullvm" 2700 | version = "0.52.6" 2701 | source = "registry+https://github.com/rust-lang/crates.io-index" 2702 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2703 | 2704 | [[package]] 2705 | name = "windows_x86_64_msvc" 2706 | version = "0.48.5" 2707 | source = "registry+https://github.com/rust-lang/crates.io-index" 2708 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2709 | 2710 | [[package]] 2711 | name = "windows_x86_64_msvc" 2712 | version = "0.52.6" 2713 | source = "registry+https://github.com/rust-lang/crates.io-index" 2714 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2715 | 2716 | [[package]] 2717 | name = "winreg" 2718 | version = "0.50.0" 2719 | source = "registry+https://github.com/rust-lang/crates.io-index" 2720 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 2721 | dependencies = [ 2722 | "cfg-if", 2723 | "windows-sys 0.48.0", 2724 | ] 2725 | 2726 | [[package]] 2727 | name = "write16" 2728 | version = "1.0.0" 2729 | source = "registry+https://github.com/rust-lang/crates.io-index" 2730 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2731 | 2732 | [[package]] 2733 | name = "writeable" 2734 | version = "0.5.5" 2735 | source = "registry+https://github.com/rust-lang/crates.io-index" 2736 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2737 | 2738 | [[package]] 2739 | name = "yaml-rust" 2740 | version = "0.4.5" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 2743 | dependencies = [ 2744 | "linked-hash-map", 2745 | ] 2746 | 2747 | [[package]] 2748 | name = "yoke" 2749 | version = "0.7.5" 2750 | source = "registry+https://github.com/rust-lang/crates.io-index" 2751 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2752 | dependencies = [ 2753 | "serde", 2754 | "stable_deref_trait", 2755 | "yoke-derive", 2756 | "zerofrom", 2757 | ] 2758 | 2759 | [[package]] 2760 | name = "yoke-derive" 2761 | version = "0.7.5" 2762 | source = "registry+https://github.com/rust-lang/crates.io-index" 2763 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2764 | dependencies = [ 2765 | "proc-macro2", 2766 | "quote", 2767 | "syn 2.0.90", 2768 | "synstructure", 2769 | ] 2770 | 2771 | [[package]] 2772 | name = "zerocopy" 2773 | version = "0.7.35" 2774 | source = "registry+https://github.com/rust-lang/crates.io-index" 2775 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2776 | dependencies = [ 2777 | "byteorder", 2778 | "zerocopy-derive", 2779 | ] 2780 | 2781 | [[package]] 2782 | name = "zerocopy-derive" 2783 | version = "0.7.35" 2784 | source = "registry+https://github.com/rust-lang/crates.io-index" 2785 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2786 | dependencies = [ 2787 | "proc-macro2", 2788 | "quote", 2789 | "syn 2.0.90", 2790 | ] 2791 | 2792 | [[package]] 2793 | name = "zerofrom" 2794 | version = "0.1.5" 2795 | source = "registry+https://github.com/rust-lang/crates.io-index" 2796 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 2797 | dependencies = [ 2798 | "zerofrom-derive", 2799 | ] 2800 | 2801 | [[package]] 2802 | name = "zerofrom-derive" 2803 | version = "0.1.5" 2804 | source = "registry+https://github.com/rust-lang/crates.io-index" 2805 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 2806 | dependencies = [ 2807 | "proc-macro2", 2808 | "quote", 2809 | "syn 2.0.90", 2810 | "synstructure", 2811 | ] 2812 | 2813 | [[package]] 2814 | name = "zerovec" 2815 | version = "0.10.4" 2816 | source = "registry+https://github.com/rust-lang/crates.io-index" 2817 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2818 | dependencies = [ 2819 | "yoke", 2820 | "zerofrom", 2821 | "zerovec-derive", 2822 | ] 2823 | 2824 | [[package]] 2825 | name = "zerovec-derive" 2826 | version = "0.10.3" 2827 | source = "registry+https://github.com/rust-lang/crates.io-index" 2828 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2829 | dependencies = [ 2830 | "proc-macro2", 2831 | "quote", 2832 | "syn 2.0.90", 2833 | ] 2834 | 2835 | [[package]] 2836 | name = "zstd" 2837 | version = "0.13.2" 2838 | source = "registry+https://github.com/rust-lang/crates.io-index" 2839 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 2840 | dependencies = [ 2841 | "zstd-safe", 2842 | ] 2843 | 2844 | [[package]] 2845 | name = "zstd-safe" 2846 | version = "7.2.1" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 2849 | dependencies = [ 2850 | "zstd-sys", 2851 | ] 2852 | 2853 | [[package]] 2854 | name = "zstd-sys" 2855 | version = "2.0.13+zstd.1.5.6" 2856 | source = "registry+https://github.com/rust-lang/crates.io-index" 2857 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 2858 | dependencies = [ 2859 | "cc", 2860 | "pkg-config", 2861 | ] 2862 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "reverse-proxy" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | async-trait="0.1" 8 | pingora = { version = "0.3", features = [ "lb" ] } 9 | pingora-core = "0.3" 10 | pingora-load-balancing = "0.3" 11 | pingora-proxy = "0.3" 12 | pingora-limits = "0.3.0" 13 | once_cell = "1.19.0" 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Reverse Proxy with Pingora 2 | 3 | This project is a **Reverse Proxy** built in Rust 🦀 using the [Pingora](https://crates.io/crates/pingora) library. The proxy implements several features to handle modern HTTP workloads efficiently. 4 | 5 | ## Features 6 | 7 | - **🔄 Load Balancing:** Round Robin algorithm for upstream selection. 8 | - **⚡ Rate Limiting:** Enforces limits per app ID. 9 | - **📡 Upstream Health Checks:** Periodic TCP health checks. 10 | - **🔌 Custom Request Filters:** Filters and modifies incoming and outgoing requests. 11 | 12 | ## Getting Started 13 | 14 | ### Prerequisites 15 | 16 | - [Rust](https://www.rust-lang.org/tools/install) (latest stable version recommended) 17 | - Cargo (comes with Rust) 18 | 19 | ### Installation 20 | 21 | 1. Clone the repository: 22 | 23 | ```bash 24 | git clone https://github.com/dexter-xD/reverse-proxy.git 25 | cd reverse-proxy 26 | ``` 27 | 28 | 2. Build the project: 29 | 30 | ```bash 31 | cargo build --release 32 | ``` 33 | 34 | 3. Run the server: 35 | 36 | ```bash 37 | cargo run --release 38 | ``` 39 | 40 | ### Testing the Proxy 41 | 42 | Use the following `curl` command to test the proxy: 43 | 44 | ```bash 45 | curl 127.0.0.1:6188 -svo /dev/null 46 | ``` 47 | 48 | ## How It Works 49 | 50 | ### Main Features Explained 51 | 52 | 1. **Load Balancer** 53 | - Implements the Round Robin algorithm to distribute traffic across upstreams. 54 | - Configures periodic health checks to ensure upstream availability. 55 | 56 | 2. **Rate Limiter** 57 | - Limits requests based on the `appid` header. 58 | - Denies requests exceeding the rate limit with a `429 Too Many Requests` response. 59 | 60 | 3. **Custom Filters** 61 | - Adds/Modifies headers for requests sent to upstreams. 62 | - Validates incoming requests using custom logic. 63 | 64 | ### Key Components 65 | 66 | - **`main.rs`**: Entry point of the application. 67 | - **`load_balancer.rs`**: Handles upstream selection and request forwarding. 68 | - **`rate_limiter.rs`**: Implements rate limiting. 69 | 70 | ### Configuration 71 | 72 | - **Upstream Servers**: 73 | Configure upstreams in the `main.rs` file: 74 | 75 | ```rust 76 | let mut upstreams = LoadBalancer::try_from_iter(["1.1.1.1:443", "1.0.0.1:443", "127.0.0.1:343"]).unwrap(); 77 | ``` 78 | 79 | - **Rate Limit**: 80 | Adjust the maximum requests per second in `rate_limiter.rs`: 81 | 82 | ```rust 83 | pub static MAX_REQ_PER_SEC: isize = 1; 84 | ``` 85 | 86 | ## Contributing 87 | 88 | Contributions are welcome! Feel free to open issues or submit pull requests. 89 | 90 | ## Acknowledgments 91 | 92 | - Built using [Pingora](https://crates.io/crates/pingora) for its lightweight and efficient proxying capabilities. 93 | - Inspired by modern HTTP proxy requirements. 94 | 95 | --- 96 | -------------------------------------------------------------------------------- /src/load_balancer.rs: -------------------------------------------------------------------------------- 1 | use async_trait::async_trait; 2 | use pingora::prelude::*; 3 | use pingora_core::upstreams::peer::HttpPeer; 4 | use pingora_core::Result; 5 | use pingora_load_balancing::selection::RoundRobin; 6 | use pingora_load_balancing::LoadBalancer; 7 | use pingora_proxy::{ProxyHttp, Session}; 8 | use pingora::http::ResponseHeader; 9 | use std::sync::Arc; 10 | 11 | use crate::rate_limiter::{RATE_LIMITER, MAX_REQ_PER_SEC}; 12 | 13 | pub struct LB(pub Arc>); 14 | 15 | impl LB { 16 | pub fn get_request_appid(&self, session: &mut Session) -> Option { 17 | match session 18 | .req_header() 19 | .headers 20 | .get("appid") 21 | .map(|v| v.to_str()) 22 | { 23 | None => None, 24 | Some(v) => match v { 25 | Ok(v) => Some(v.to_string()), 26 | Err(_) => None, 27 | }, 28 | } 29 | } 30 | } 31 | 32 | #[async_trait] 33 | impl ProxyHttp for LB { 34 | type CTX = (); 35 | fn new_ctx(&self) -> Self::CTX { 36 | () 37 | } 38 | 39 | async fn upstream_peer(&self, _session: &mut Session, _ctx: &mut Self::CTX) -> Result> { 40 | let upstream = self.0.select(b"", 256).unwrap(); 41 | println!("upstream peer is: {upstream:?}"); 42 | 43 | let peer = Box::new(HttpPeer::new(upstream, true, "one.one.one.one".to_string())); 44 | Ok(peer) 45 | } 46 | 47 | async fn upstream_request_filter( 48 | &self, 49 | _session: &mut Session, 50 | upstream_request: &mut RequestHeader, 51 | _ctx: &mut Self::CTX, 52 | ) -> Result<()> { 53 | upstream_request.insert_header("Host", "one.one.one.one").unwrap(); 54 | Ok(()) 55 | } 56 | 57 | async fn request_filter(&self, session: &mut Session, _ctx: &mut Self::CTX) -> Result { 58 | let appid = match self.get_request_appid(session) { 59 | None => return Ok(false), 60 | Some(addr) => addr, 61 | }; 62 | 63 | let curr_window_request = RATE_LIMITER.observe(&appid, 1); 64 | if curr_window_request > MAX_REQ_PER_SEC { 65 | let mut header = ResponseHeader::build(429, None).unwrap(); 66 | header.insert_header("X-Rate-Limit-Limit", MAX_REQ_PER_SEC.to_string()).unwrap(); 67 | header.insert_header("X-Rate-Limit-Remaining", "0").unwrap(); 68 | header.insert_header("X-Rate-Limit-Reset", "1").unwrap(); 69 | session.set_keepalive(None); 70 | session.write_response_header(Box::new(header), true).await?; 71 | return Ok(true); 72 | } 73 | Ok(false) 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod load_balancer; 2 | mod rate_limiter; 3 | 4 | use pingora::prelude::*; 5 | use pingora_core::services::background::background_service; 6 | use std::{sync::Arc, time::Duration}; 7 | use pingora_load_balancing::{selection::RoundRobin, LoadBalancer}; 8 | 9 | fn main() { 10 | let mut my_server = Server::new(None).unwrap(); 11 | my_server.bootstrap(); 12 | 13 | let mut upstreams = 14 | LoadBalancer::try_from_iter(["1.1.1.1:443", "1.0.0.1:443", "127.0.0.1:343"]).unwrap(); 15 | 16 | let hc = TcpHealthCheck::new(); 17 | upstreams.set_health_check(hc); 18 | upstreams.health_check_frequency = Some(Duration::from_secs(1)); 19 | 20 | let background = background_service("health check", upstreams); 21 | let upstreams = background.task(); 22 | 23 | let mut lb = http_proxy_service(&my_server.configuration, load_balancer::LB(Arc::clone(&upstreams))); 24 | lb.add_tcp("0.0.0.0:6188"); 25 | println!("Listening on: 0.0.0.0:6188"); 26 | 27 | my_server.add_service(background); 28 | my_server.add_service(lb); 29 | my_server.run_forever(); 30 | } 31 | -------------------------------------------------------------------------------- /src/rate_limiter.rs: -------------------------------------------------------------------------------- 1 | use once_cell::sync::Lazy; 2 | use pingora_limits::rate::Rate; 3 | use std::time::Duration; 4 | 5 | pub static RATE_LIMITER: Lazy = Lazy::new(|| Rate::new(Duration::from_secs(1))); 6 | 7 | pub static MAX_REQ_PER_SEC: isize = 1; 8 | --------------------------------------------------------------------------------