├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── .vercelignore ├── Cargo.lock ├── Cargo.toml ├── FUNDING.yml ├── README.md ├── api ├── crab.rs └── examples │ ├── beer.rs │ ├── cache.rs │ ├── create.rs │ ├── env.rs │ ├── error.rs │ └── params.rs ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── public ├── cover.jpg └── favicon.ico ├── src ├── app │ ├── globals.css │ └── layout.tsx ├── pages │ └── api │ │ └── hello.ts └── rs │ └── utils.rs ├── tsconfig.json └── vercel.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | indent_style = space 7 | indent_size = 2 8 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | 38 | target/ 39 | -------------------------------------------------------------------------------- /.vercelignore: -------------------------------------------------------------------------------- 1 | target/ 2 | .next 3 | node_modules 4 | -------------------------------------------------------------------------------- /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.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.2" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "async-stream" 31 | version = "0.3.5" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" 34 | dependencies = [ 35 | "async-stream-impl", 36 | "futures-core", 37 | "pin-project-lite", 38 | ] 39 | 40 | [[package]] 41 | name = "async-stream-impl" 42 | version = "0.3.5" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" 45 | dependencies = [ 46 | "proc-macro2", 47 | "quote", 48 | "syn 2.0.104", 49 | ] 50 | 51 | [[package]] 52 | name = "async-trait" 53 | version = "0.1.88" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" 56 | dependencies = [ 57 | "proc-macro2", 58 | "quote", 59 | "syn 2.0.104", 60 | ] 61 | 62 | [[package]] 63 | name = "atomic-waker" 64 | version = "1.1.2" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 67 | 68 | [[package]] 69 | name = "autocfg" 70 | version = "1.1.0" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 73 | 74 | [[package]] 75 | name = "aws_lambda_events" 76 | version = "0.16.1" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "144ec7565561115498a288850cc6a42b279e09b6c4b88f623eecb9c8ca96c08c" 79 | dependencies = [ 80 | "base64", 81 | "bytes", 82 | "http", 83 | "http-body", 84 | "http-serde", 85 | "query_map", 86 | "serde", 87 | "serde_json", 88 | ] 89 | 90 | [[package]] 91 | name = "backtrace" 92 | version = "0.3.69" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" 95 | dependencies = [ 96 | "addr2line", 97 | "cc", 98 | "cfg-if", 99 | "libc", 100 | "miniz_oxide", 101 | "object", 102 | "rustc-demangle", 103 | ] 104 | 105 | [[package]] 106 | name = "base64" 107 | version = "0.22.1" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 110 | 111 | [[package]] 112 | name = "bitflags" 113 | version = "1.3.2" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 116 | 117 | [[package]] 118 | name = "bitflags" 119 | version = "2.4.2" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" 122 | 123 | [[package]] 124 | name = "bumpalo" 125 | version = "3.15.4" 126 | source = "registry+https://github.com/rust-lang/crates.io-index" 127 | checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" 128 | 129 | [[package]] 130 | name = "bytes" 131 | version = "1.10.1" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 134 | dependencies = [ 135 | "serde", 136 | ] 137 | 138 | [[package]] 139 | name = "cc" 140 | version = "1.2.30" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" 143 | dependencies = [ 144 | "shlex", 145 | ] 146 | 147 | [[package]] 148 | name = "cfg-if" 149 | version = "1.0.0" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 152 | 153 | [[package]] 154 | name = "core-foundation" 155 | version = "0.9.4" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 158 | dependencies = [ 159 | "core-foundation-sys", 160 | "libc", 161 | ] 162 | 163 | [[package]] 164 | name = "core-foundation-sys" 165 | version = "0.8.6" 166 | source = "registry+https://github.com/rust-lang/crates.io-index" 167 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 168 | 169 | [[package]] 170 | name = "displaydoc" 171 | version = "0.2.5" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 174 | dependencies = [ 175 | "proc-macro2", 176 | "quote", 177 | "syn 2.0.104", 178 | ] 179 | 180 | [[package]] 181 | name = "dotenv" 182 | version = "0.15.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 185 | 186 | [[package]] 187 | name = "encoding_rs" 188 | version = "0.8.33" 189 | source = "registry+https://github.com/rust-lang/crates.io-index" 190 | checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" 191 | dependencies = [ 192 | "cfg-if", 193 | ] 194 | 195 | [[package]] 196 | name = "equivalent" 197 | version = "1.0.1" 198 | source = "registry+https://github.com/rust-lang/crates.io-index" 199 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 200 | 201 | [[package]] 202 | name = "errno" 203 | version = "0.3.8" 204 | source = "registry+https://github.com/rust-lang/crates.io-index" 205 | checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" 206 | dependencies = [ 207 | "libc", 208 | "windows-sys 0.52.0", 209 | ] 210 | 211 | [[package]] 212 | name = "fastrand" 213 | version = "2.0.1" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" 216 | 217 | [[package]] 218 | name = "fnv" 219 | version = "1.0.7" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 222 | 223 | [[package]] 224 | name = "foreign-types" 225 | version = "0.3.2" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 228 | dependencies = [ 229 | "foreign-types-shared", 230 | ] 231 | 232 | [[package]] 233 | name = "foreign-types-shared" 234 | version = "0.1.1" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 237 | 238 | [[package]] 239 | name = "form_urlencoded" 240 | version = "1.2.1" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 243 | dependencies = [ 244 | "percent-encoding", 245 | ] 246 | 247 | [[package]] 248 | name = "futures" 249 | version = "0.3.30" 250 | source = "registry+https://github.com/rust-lang/crates.io-index" 251 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 252 | dependencies = [ 253 | "futures-channel", 254 | "futures-core", 255 | "futures-executor", 256 | "futures-io", 257 | "futures-sink", 258 | "futures-task", 259 | "futures-util", 260 | ] 261 | 262 | [[package]] 263 | name = "futures-channel" 264 | version = "0.3.30" 265 | source = "registry+https://github.com/rust-lang/crates.io-index" 266 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 267 | dependencies = [ 268 | "futures-core", 269 | "futures-sink", 270 | ] 271 | 272 | [[package]] 273 | name = "futures-core" 274 | version = "0.3.30" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 277 | 278 | [[package]] 279 | name = "futures-executor" 280 | version = "0.3.30" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 283 | dependencies = [ 284 | "futures-core", 285 | "futures-task", 286 | "futures-util", 287 | ] 288 | 289 | [[package]] 290 | name = "futures-io" 291 | version = "0.3.30" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 294 | 295 | [[package]] 296 | name = "futures-macro" 297 | version = "0.3.30" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 300 | dependencies = [ 301 | "proc-macro2", 302 | "quote", 303 | "syn 2.0.104", 304 | ] 305 | 306 | [[package]] 307 | name = "futures-sink" 308 | version = "0.3.30" 309 | source = "registry+https://github.com/rust-lang/crates.io-index" 310 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 311 | 312 | [[package]] 313 | name = "futures-task" 314 | version = "0.3.30" 315 | source = "registry+https://github.com/rust-lang/crates.io-index" 316 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 317 | 318 | [[package]] 319 | name = "futures-util" 320 | version = "0.3.30" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 323 | dependencies = [ 324 | "futures-channel", 325 | "futures-core", 326 | "futures-io", 327 | "futures-macro", 328 | "futures-sink", 329 | "futures-task", 330 | "memchr", 331 | "pin-project-lite", 332 | "pin-utils", 333 | "slab", 334 | ] 335 | 336 | [[package]] 337 | name = "getrandom" 338 | version = "0.2.16" 339 | source = "registry+https://github.com/rust-lang/crates.io-index" 340 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 341 | dependencies = [ 342 | "cfg-if", 343 | "libc", 344 | "wasi", 345 | ] 346 | 347 | [[package]] 348 | name = "gimli" 349 | version = "0.28.1" 350 | source = "registry+https://github.com/rust-lang/crates.io-index" 351 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 352 | 353 | [[package]] 354 | name = "glob" 355 | version = "0.3.1" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 358 | 359 | [[package]] 360 | name = "h2" 361 | version = "0.4.11" 362 | source = "registry+https://github.com/rust-lang/crates.io-index" 363 | checksum = "17da50a276f1e01e0ba6c029e47b7100754904ee8a278f886546e98575380785" 364 | dependencies = [ 365 | "atomic-waker", 366 | "bytes", 367 | "fnv", 368 | "futures-core", 369 | "futures-sink", 370 | "http", 371 | "indexmap", 372 | "slab", 373 | "tokio", 374 | "tokio-util", 375 | "tracing", 376 | ] 377 | 378 | [[package]] 379 | name = "hashbrown" 380 | version = "0.14.3" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" 383 | 384 | [[package]] 385 | name = "http" 386 | version = "1.3.1" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 389 | dependencies = [ 390 | "bytes", 391 | "fnv", 392 | "itoa", 393 | ] 394 | 395 | [[package]] 396 | name = "http-body" 397 | version = "1.0.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 400 | dependencies = [ 401 | "bytes", 402 | "http", 403 | ] 404 | 405 | [[package]] 406 | name = "http-body-util" 407 | version = "0.1.3" 408 | source = "registry+https://github.com/rust-lang/crates.io-index" 409 | checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 410 | dependencies = [ 411 | "bytes", 412 | "futures-core", 413 | "http", 414 | "http-body", 415 | "pin-project-lite", 416 | ] 417 | 418 | [[package]] 419 | name = "http-serde" 420 | version = "2.1.1" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" 423 | dependencies = [ 424 | "http", 425 | "serde", 426 | ] 427 | 428 | [[package]] 429 | name = "httparse" 430 | version = "1.10.1" 431 | source = "registry+https://github.com/rust-lang/crates.io-index" 432 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 433 | 434 | [[package]] 435 | name = "hyper" 436 | version = "1.6.0" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 439 | dependencies = [ 440 | "bytes", 441 | "futures-channel", 442 | "futures-util", 443 | "h2", 444 | "http", 445 | "http-body", 446 | "httparse", 447 | "itoa", 448 | "pin-project-lite", 449 | "smallvec", 450 | "tokio", 451 | "want", 452 | ] 453 | 454 | [[package]] 455 | name = "hyper-rustls" 456 | version = "0.27.7" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 459 | dependencies = [ 460 | "http", 461 | "hyper", 462 | "hyper-util", 463 | "rustls", 464 | "rustls-pki-types", 465 | "tokio", 466 | "tokio-rustls", 467 | "tower-service", 468 | ] 469 | 470 | [[package]] 471 | name = "hyper-tls" 472 | version = "0.6.0" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 475 | dependencies = [ 476 | "bytes", 477 | "http-body-util", 478 | "hyper", 479 | "hyper-util", 480 | "native-tls", 481 | "tokio", 482 | "tokio-native-tls", 483 | "tower-service", 484 | ] 485 | 486 | [[package]] 487 | name = "hyper-util" 488 | version = "0.1.15" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | checksum = "7f66d5bd4c6f02bf0542fad85d626775bab9258cf795a4256dcaf3161114d1df" 491 | dependencies = [ 492 | "base64", 493 | "bytes", 494 | "futures-channel", 495 | "futures-core", 496 | "futures-util", 497 | "http", 498 | "http-body", 499 | "hyper", 500 | "ipnet", 501 | "libc", 502 | "percent-encoding", 503 | "pin-project-lite", 504 | "socket2", 505 | "system-configuration", 506 | "tokio", 507 | "tower-service", 508 | "tracing", 509 | "windows-registry", 510 | ] 511 | 512 | [[package]] 513 | name = "icu_collections" 514 | version = "2.0.0" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 517 | dependencies = [ 518 | "displaydoc", 519 | "potential_utf", 520 | "yoke", 521 | "zerofrom", 522 | "zerovec", 523 | ] 524 | 525 | [[package]] 526 | name = "icu_locale_core" 527 | version = "2.0.0" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 530 | dependencies = [ 531 | "displaydoc", 532 | "litemap", 533 | "tinystr", 534 | "writeable", 535 | "zerovec", 536 | ] 537 | 538 | [[package]] 539 | name = "icu_normalizer" 540 | version = "2.0.0" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 543 | dependencies = [ 544 | "displaydoc", 545 | "icu_collections", 546 | "icu_normalizer_data", 547 | "icu_properties", 548 | "icu_provider", 549 | "smallvec", 550 | "zerovec", 551 | ] 552 | 553 | [[package]] 554 | name = "icu_normalizer_data" 555 | version = "2.0.0" 556 | source = "registry+https://github.com/rust-lang/crates.io-index" 557 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 558 | 559 | [[package]] 560 | name = "icu_properties" 561 | version = "2.0.1" 562 | source = "registry+https://github.com/rust-lang/crates.io-index" 563 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 564 | dependencies = [ 565 | "displaydoc", 566 | "icu_collections", 567 | "icu_locale_core", 568 | "icu_properties_data", 569 | "icu_provider", 570 | "potential_utf", 571 | "zerotrie", 572 | "zerovec", 573 | ] 574 | 575 | [[package]] 576 | name = "icu_properties_data" 577 | version = "2.0.1" 578 | source = "registry+https://github.com/rust-lang/crates.io-index" 579 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 580 | 581 | [[package]] 582 | name = "icu_provider" 583 | version = "2.0.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 586 | dependencies = [ 587 | "displaydoc", 588 | "icu_locale_core", 589 | "stable_deref_trait", 590 | "tinystr", 591 | "writeable", 592 | "yoke", 593 | "zerofrom", 594 | "zerotrie", 595 | "zerovec", 596 | ] 597 | 598 | [[package]] 599 | name = "idna" 600 | version = "1.0.3" 601 | source = "registry+https://github.com/rust-lang/crates.io-index" 602 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 603 | dependencies = [ 604 | "idna_adapter", 605 | "smallvec", 606 | "utf8_iter", 607 | ] 608 | 609 | [[package]] 610 | name = "idna_adapter" 611 | version = "1.2.1" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 614 | dependencies = [ 615 | "icu_normalizer", 616 | "icu_properties", 617 | ] 618 | 619 | [[package]] 620 | name = "indexmap" 621 | version = "2.2.5" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" 624 | dependencies = [ 625 | "equivalent", 626 | "hashbrown", 627 | ] 628 | 629 | [[package]] 630 | name = "io-uring" 631 | version = "0.7.8" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" 634 | dependencies = [ 635 | "bitflags 2.4.2", 636 | "cfg-if", 637 | "libc", 638 | ] 639 | 640 | [[package]] 641 | name = "ipnet" 642 | version = "2.9.0" 643 | source = "registry+https://github.com/rust-lang/crates.io-index" 644 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 645 | 646 | [[package]] 647 | name = "iri-string" 648 | version = "0.7.8" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 651 | dependencies = [ 652 | "memchr", 653 | "serde", 654 | ] 655 | 656 | [[package]] 657 | name = "itoa" 658 | version = "1.0.10" 659 | source = "registry+https://github.com/rust-lang/crates.io-index" 660 | checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" 661 | 662 | [[package]] 663 | name = "js-sys" 664 | version = "0.3.77" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 667 | dependencies = [ 668 | "once_cell", 669 | "wasm-bindgen", 670 | ] 671 | 672 | [[package]] 673 | name = "lambda_http" 674 | version = "0.15.1" 675 | source = "registry+https://github.com/rust-lang/crates.io-index" 676 | checksum = "8dfc9f1bd9a56576319c1fe37f84e8551c9f9757f7f2307aa03c5b5d4a3c4d1c" 677 | dependencies = [ 678 | "aws_lambda_events", 679 | "base64", 680 | "bytes", 681 | "encoding_rs", 682 | "futures", 683 | "futures-util", 684 | "http", 685 | "http-body", 686 | "http-body-util", 687 | "hyper", 688 | "lambda_runtime", 689 | "mime", 690 | "percent-encoding", 691 | "pin-project-lite", 692 | "serde", 693 | "serde_json", 694 | "serde_urlencoded", 695 | "tokio-stream", 696 | "url", 697 | ] 698 | 699 | [[package]] 700 | name = "lambda_runtime" 701 | version = "0.14.2" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "c64945a7a718d04acbbd06fa8acdc37576f4dfbd8982932365b72907e7b2b27e" 704 | dependencies = [ 705 | "async-stream", 706 | "base64", 707 | "bytes", 708 | "futures", 709 | "http", 710 | "http-body", 711 | "http-body-util", 712 | "http-serde", 713 | "hyper", 714 | "hyper-util", 715 | "lambda_runtime_api_client", 716 | "pin-project", 717 | "serde", 718 | "serde_json", 719 | "serde_path_to_error", 720 | "tokio", 721 | "tokio-stream", 722 | "tower", 723 | "tower-layer", 724 | "tracing", 725 | ] 726 | 727 | [[package]] 728 | name = "lambda_runtime_api_client" 729 | version = "0.12.2" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "df2589b440f900f61fc6d5cd26f71f0e75dcc7610bdbb88a56f0d308e1c35b42" 732 | dependencies = [ 733 | "bytes", 734 | "futures-channel", 735 | "futures-util", 736 | "http", 737 | "http-body", 738 | "http-body-util", 739 | "hyper", 740 | "hyper-util", 741 | "tokio", 742 | "tower", 743 | "tower-service", 744 | "tracing", 745 | "tracing-subscriber", 746 | ] 747 | 748 | [[package]] 749 | name = "lazy_static" 750 | version = "1.4.0" 751 | source = "registry+https://github.com/rust-lang/crates.io-index" 752 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 753 | 754 | [[package]] 755 | name = "libc" 756 | version = "0.2.174" 757 | source = "registry+https://github.com/rust-lang/crates.io-index" 758 | checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" 759 | 760 | [[package]] 761 | name = "linux-raw-sys" 762 | version = "0.4.13" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" 765 | 766 | [[package]] 767 | name = "litemap" 768 | version = "0.8.0" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 771 | 772 | [[package]] 773 | name = "log" 774 | version = "0.4.21" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 777 | 778 | [[package]] 779 | name = "matchers" 780 | version = "0.1.0" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 783 | dependencies = [ 784 | "regex-automata 0.1.10", 785 | ] 786 | 787 | [[package]] 788 | name = "memchr" 789 | version = "2.7.1" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" 792 | 793 | [[package]] 794 | name = "mime" 795 | version = "0.3.17" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 798 | 799 | [[package]] 800 | name = "miniz_oxide" 801 | version = "0.7.2" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" 804 | dependencies = [ 805 | "adler", 806 | ] 807 | 808 | [[package]] 809 | name = "mio" 810 | version = "1.0.4" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 813 | dependencies = [ 814 | "libc", 815 | "wasi", 816 | "windows-sys 0.59.0", 817 | ] 818 | 819 | [[package]] 820 | name = "native-tls" 821 | version = "0.2.11" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 824 | dependencies = [ 825 | "lazy_static", 826 | "libc", 827 | "log", 828 | "openssl", 829 | "openssl-probe", 830 | "openssl-sys", 831 | "schannel", 832 | "security-framework", 833 | "security-framework-sys", 834 | "tempfile", 835 | ] 836 | 837 | [[package]] 838 | name = "next-rust" 839 | version = "0.1.0" 840 | dependencies = [ 841 | "dotenv", 842 | "reqwest", 843 | "serde", 844 | "serde_json", 845 | "tokio", 846 | "url", 847 | "vercel_runtime", 848 | ] 849 | 850 | [[package]] 851 | name = "object" 852 | version = "0.32.2" 853 | source = "registry+https://github.com/rust-lang/crates.io-index" 854 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 855 | dependencies = [ 856 | "memchr", 857 | ] 858 | 859 | [[package]] 860 | name = "once_cell" 861 | version = "1.19.0" 862 | source = "registry+https://github.com/rust-lang/crates.io-index" 863 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 864 | 865 | [[package]] 866 | name = "openssl" 867 | version = "0.10.64" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 870 | dependencies = [ 871 | "bitflags 2.4.2", 872 | "cfg-if", 873 | "foreign-types", 874 | "libc", 875 | "once_cell", 876 | "openssl-macros", 877 | "openssl-sys", 878 | ] 879 | 880 | [[package]] 881 | name = "openssl-macros" 882 | version = "0.1.1" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 885 | dependencies = [ 886 | "proc-macro2", 887 | "quote", 888 | "syn 2.0.104", 889 | ] 890 | 891 | [[package]] 892 | name = "openssl-probe" 893 | version = "0.1.5" 894 | source = "registry+https://github.com/rust-lang/crates.io-index" 895 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 896 | 897 | [[package]] 898 | name = "openssl-sys" 899 | version = "0.9.101" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" 902 | dependencies = [ 903 | "cc", 904 | "libc", 905 | "pkg-config", 906 | "vcpkg", 907 | ] 908 | 909 | [[package]] 910 | name = "percent-encoding" 911 | version = "2.3.1" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 914 | 915 | [[package]] 916 | name = "pin-project" 917 | version = "1.1.5" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 920 | dependencies = [ 921 | "pin-project-internal", 922 | ] 923 | 924 | [[package]] 925 | name = "pin-project-internal" 926 | version = "1.1.5" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 929 | dependencies = [ 930 | "proc-macro2", 931 | "quote", 932 | "syn 2.0.104", 933 | ] 934 | 935 | [[package]] 936 | name = "pin-project-lite" 937 | version = "0.2.13" 938 | source = "registry+https://github.com/rust-lang/crates.io-index" 939 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" 940 | 941 | [[package]] 942 | name = "pin-utils" 943 | version = "0.1.0" 944 | source = "registry+https://github.com/rust-lang/crates.io-index" 945 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 946 | 947 | [[package]] 948 | name = "pkg-config" 949 | version = "0.3.30" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 952 | 953 | [[package]] 954 | name = "potential_utf" 955 | version = "0.1.2" 956 | source = "registry+https://github.com/rust-lang/crates.io-index" 957 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 958 | dependencies = [ 959 | "zerovec", 960 | ] 961 | 962 | [[package]] 963 | name = "proc-macro2" 964 | version = "1.0.95" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 967 | dependencies = [ 968 | "unicode-ident", 969 | ] 970 | 971 | [[package]] 972 | name = "query_map" 973 | version = "0.7.0" 974 | source = "registry+https://github.com/rust-lang/crates.io-index" 975 | checksum = "5eab6b8b1074ef3359a863758dae650c7c0c6027927a085b7af911c8e0bf3a15" 976 | dependencies = [ 977 | "form_urlencoded", 978 | "serde", 979 | "serde_derive", 980 | ] 981 | 982 | [[package]] 983 | name = "quote" 984 | version = "1.0.35" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" 987 | dependencies = [ 988 | "proc-macro2", 989 | ] 990 | 991 | [[package]] 992 | name = "regex" 993 | version = "1.10.3" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" 996 | dependencies = [ 997 | "aho-corasick", 998 | "memchr", 999 | "regex-automata 0.4.6", 1000 | "regex-syntax 0.8.2", 1001 | ] 1002 | 1003 | [[package]] 1004 | name = "regex-automata" 1005 | version = "0.1.10" 1006 | source = "registry+https://github.com/rust-lang/crates.io-index" 1007 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1008 | dependencies = [ 1009 | "regex-syntax 0.6.29", 1010 | ] 1011 | 1012 | [[package]] 1013 | name = "regex-automata" 1014 | version = "0.4.6" 1015 | source = "registry+https://github.com/rust-lang/crates.io-index" 1016 | checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 1017 | dependencies = [ 1018 | "aho-corasick", 1019 | "memchr", 1020 | "regex-syntax 0.8.2", 1021 | ] 1022 | 1023 | [[package]] 1024 | name = "regex-syntax" 1025 | version = "0.6.29" 1026 | source = "registry+https://github.com/rust-lang/crates.io-index" 1027 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1028 | 1029 | [[package]] 1030 | name = "regex-syntax" 1031 | version = "0.8.2" 1032 | source = "registry+https://github.com/rust-lang/crates.io-index" 1033 | checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" 1034 | 1035 | [[package]] 1036 | name = "reqwest" 1037 | version = "0.12.22" 1038 | source = "registry+https://github.com/rust-lang/crates.io-index" 1039 | checksum = "cbc931937e6ca3a06e3b6c0aa7841849b160a90351d6ab467a8b9b9959767531" 1040 | dependencies = [ 1041 | "base64", 1042 | "bytes", 1043 | "encoding_rs", 1044 | "futures-channel", 1045 | "futures-core", 1046 | "futures-util", 1047 | "h2", 1048 | "http", 1049 | "http-body", 1050 | "http-body-util", 1051 | "hyper", 1052 | "hyper-rustls", 1053 | "hyper-tls", 1054 | "hyper-util", 1055 | "js-sys", 1056 | "log", 1057 | "mime", 1058 | "native-tls", 1059 | "percent-encoding", 1060 | "pin-project-lite", 1061 | "rustls-pki-types", 1062 | "serde", 1063 | "serde_json", 1064 | "serde_urlencoded", 1065 | "sync_wrapper", 1066 | "tokio", 1067 | "tokio-native-tls", 1068 | "tower", 1069 | "tower-http", 1070 | "tower-service", 1071 | "url", 1072 | "wasm-bindgen", 1073 | "wasm-bindgen-futures", 1074 | "web-sys", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "ring" 1079 | version = "0.17.14" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 1082 | dependencies = [ 1083 | "cc", 1084 | "cfg-if", 1085 | "getrandom", 1086 | "libc", 1087 | "untrusted", 1088 | "windows-sys 0.52.0", 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "rustc-demangle" 1093 | version = "0.1.23" 1094 | source = "registry+https://github.com/rust-lang/crates.io-index" 1095 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" 1096 | 1097 | [[package]] 1098 | name = "rustix" 1099 | version = "0.38.31" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" 1102 | dependencies = [ 1103 | "bitflags 2.4.2", 1104 | "errno", 1105 | "libc", 1106 | "linux-raw-sys", 1107 | "windows-sys 0.52.0", 1108 | ] 1109 | 1110 | [[package]] 1111 | name = "rustls" 1112 | version = "0.23.29" 1113 | source = "registry+https://github.com/rust-lang/crates.io-index" 1114 | checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" 1115 | dependencies = [ 1116 | "once_cell", 1117 | "rustls-pki-types", 1118 | "rustls-webpki", 1119 | "subtle", 1120 | "zeroize", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "rustls-pki-types" 1125 | version = "1.12.0" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 1128 | dependencies = [ 1129 | "zeroize", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "rustls-webpki" 1134 | version = "0.103.4" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 1137 | dependencies = [ 1138 | "ring", 1139 | "rustls-pki-types", 1140 | "untrusted", 1141 | ] 1142 | 1143 | [[package]] 1144 | name = "rustversion" 1145 | version = "1.0.21" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" 1148 | 1149 | [[package]] 1150 | name = "ryu" 1151 | version = "1.0.17" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" 1154 | 1155 | [[package]] 1156 | name = "schannel" 1157 | version = "0.1.23" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1160 | dependencies = [ 1161 | "windows-sys 0.52.0", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "security-framework" 1166 | version = "2.9.2" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" 1169 | dependencies = [ 1170 | "bitflags 1.3.2", 1171 | "core-foundation", 1172 | "core-foundation-sys", 1173 | "libc", 1174 | "security-framework-sys", 1175 | ] 1176 | 1177 | [[package]] 1178 | name = "security-framework-sys" 1179 | version = "2.9.1" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" 1182 | dependencies = [ 1183 | "core-foundation-sys", 1184 | "libc", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "serde" 1189 | version = "1.0.219" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 1192 | dependencies = [ 1193 | "serde_derive", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "serde_derive" 1198 | version = "1.0.219" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 1201 | dependencies = [ 1202 | "proc-macro2", 1203 | "quote", 1204 | "syn 2.0.104", 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "serde_json" 1209 | version = "1.0.140" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 1212 | dependencies = [ 1213 | "itoa", 1214 | "memchr", 1215 | "ryu", 1216 | "serde", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "serde_path_to_error" 1221 | version = "0.1.16" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" 1224 | dependencies = [ 1225 | "itoa", 1226 | "serde", 1227 | ] 1228 | 1229 | [[package]] 1230 | name = "serde_urlencoded" 1231 | version = "0.7.1" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1234 | dependencies = [ 1235 | "form_urlencoded", 1236 | "itoa", 1237 | "ryu", 1238 | "serde", 1239 | ] 1240 | 1241 | [[package]] 1242 | name = "sharded-slab" 1243 | version = "0.1.7" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 1246 | dependencies = [ 1247 | "lazy_static", 1248 | ] 1249 | 1250 | [[package]] 1251 | name = "shlex" 1252 | version = "1.3.0" 1253 | source = "registry+https://github.com/rust-lang/crates.io-index" 1254 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1255 | 1256 | [[package]] 1257 | name = "slab" 1258 | version = "0.4.9" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1261 | dependencies = [ 1262 | "autocfg", 1263 | ] 1264 | 1265 | [[package]] 1266 | name = "smallvec" 1267 | version = "1.15.1" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 1270 | 1271 | [[package]] 1272 | name = "socket2" 1273 | version = "0.5.10" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 1276 | dependencies = [ 1277 | "libc", 1278 | "windows-sys 0.52.0", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "stable_deref_trait" 1283 | version = "1.2.0" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1286 | 1287 | [[package]] 1288 | name = "subtle" 1289 | version = "2.6.1" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1292 | 1293 | [[package]] 1294 | name = "syn" 1295 | version = "1.0.109" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 1298 | dependencies = [ 1299 | "proc-macro2", 1300 | "quote", 1301 | "unicode-ident", 1302 | ] 1303 | 1304 | [[package]] 1305 | name = "syn" 1306 | version = "2.0.104" 1307 | source = "registry+https://github.com/rust-lang/crates.io-index" 1308 | checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" 1309 | dependencies = [ 1310 | "proc-macro2", 1311 | "quote", 1312 | "unicode-ident", 1313 | ] 1314 | 1315 | [[package]] 1316 | name = "sync_wrapper" 1317 | version = "1.0.2" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1320 | dependencies = [ 1321 | "futures-core", 1322 | ] 1323 | 1324 | [[package]] 1325 | name = "synstructure" 1326 | version = "0.13.2" 1327 | source = "registry+https://github.com/rust-lang/crates.io-index" 1328 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 1329 | dependencies = [ 1330 | "proc-macro2", 1331 | "quote", 1332 | "syn 2.0.104", 1333 | ] 1334 | 1335 | [[package]] 1336 | name = "system-configuration" 1337 | version = "0.6.1" 1338 | source = "registry+https://github.com/rust-lang/crates.io-index" 1339 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1340 | dependencies = [ 1341 | "bitflags 2.4.2", 1342 | "core-foundation", 1343 | "system-configuration-sys", 1344 | ] 1345 | 1346 | [[package]] 1347 | name = "system-configuration-sys" 1348 | version = "0.6.0" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1351 | dependencies = [ 1352 | "core-foundation-sys", 1353 | "libc", 1354 | ] 1355 | 1356 | [[package]] 1357 | name = "tempfile" 1358 | version = "3.10.1" 1359 | source = "registry+https://github.com/rust-lang/crates.io-index" 1360 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 1361 | dependencies = [ 1362 | "cfg-if", 1363 | "fastrand", 1364 | "rustix", 1365 | "windows-sys 0.52.0", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "thread_local" 1370 | version = "1.1.8" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 1373 | dependencies = [ 1374 | "cfg-if", 1375 | "once_cell", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "tinystr" 1380 | version = "0.8.1" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 1383 | dependencies = [ 1384 | "displaydoc", 1385 | "zerovec", 1386 | ] 1387 | 1388 | [[package]] 1389 | name = "tokio" 1390 | version = "1.46.1" 1391 | source = "registry+https://github.com/rust-lang/crates.io-index" 1392 | checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" 1393 | dependencies = [ 1394 | "backtrace", 1395 | "bytes", 1396 | "io-uring", 1397 | "libc", 1398 | "mio", 1399 | "pin-project-lite", 1400 | "slab", 1401 | "socket2", 1402 | "tokio-macros", 1403 | "windows-sys 0.52.0", 1404 | ] 1405 | 1406 | [[package]] 1407 | name = "tokio-macros" 1408 | version = "2.5.0" 1409 | source = "registry+https://github.com/rust-lang/crates.io-index" 1410 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1411 | dependencies = [ 1412 | "proc-macro2", 1413 | "quote", 1414 | "syn 2.0.104", 1415 | ] 1416 | 1417 | [[package]] 1418 | name = "tokio-native-tls" 1419 | version = "0.3.1" 1420 | source = "registry+https://github.com/rust-lang/crates.io-index" 1421 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1422 | dependencies = [ 1423 | "native-tls", 1424 | "tokio", 1425 | ] 1426 | 1427 | [[package]] 1428 | name = "tokio-rustls" 1429 | version = "0.26.2" 1430 | source = "registry+https://github.com/rust-lang/crates.io-index" 1431 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 1432 | dependencies = [ 1433 | "rustls", 1434 | "tokio", 1435 | ] 1436 | 1437 | [[package]] 1438 | name = "tokio-stream" 1439 | version = "0.1.14" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" 1442 | dependencies = [ 1443 | "futures-core", 1444 | "pin-project-lite", 1445 | "tokio", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "tokio-util" 1450 | version = "0.7.10" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" 1453 | dependencies = [ 1454 | "bytes", 1455 | "futures-core", 1456 | "futures-sink", 1457 | "pin-project-lite", 1458 | "tokio", 1459 | "tracing", 1460 | ] 1461 | 1462 | [[package]] 1463 | name = "tower" 1464 | version = "0.5.2" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 1467 | dependencies = [ 1468 | "futures-core", 1469 | "futures-util", 1470 | "pin-project-lite", 1471 | "sync_wrapper", 1472 | "tokio", 1473 | "tower-layer", 1474 | "tower-service", 1475 | ] 1476 | 1477 | [[package]] 1478 | name = "tower-http" 1479 | version = "0.6.6" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 1482 | dependencies = [ 1483 | "bitflags 2.4.2", 1484 | "bytes", 1485 | "futures-util", 1486 | "http", 1487 | "http-body", 1488 | "iri-string", 1489 | "pin-project-lite", 1490 | "tower", 1491 | "tower-layer", 1492 | "tower-service", 1493 | ] 1494 | 1495 | [[package]] 1496 | name = "tower-layer" 1497 | version = "0.3.3" 1498 | source = "registry+https://github.com/rust-lang/crates.io-index" 1499 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 1500 | 1501 | [[package]] 1502 | name = "tower-service" 1503 | version = "0.3.3" 1504 | source = "registry+https://github.com/rust-lang/crates.io-index" 1505 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 1506 | 1507 | [[package]] 1508 | name = "tracing" 1509 | version = "0.1.41" 1510 | source = "registry+https://github.com/rust-lang/crates.io-index" 1511 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 1512 | dependencies = [ 1513 | "log", 1514 | "pin-project-lite", 1515 | "tracing-attributes", 1516 | "tracing-core", 1517 | ] 1518 | 1519 | [[package]] 1520 | name = "tracing-attributes" 1521 | version = "0.1.30" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 1524 | dependencies = [ 1525 | "proc-macro2", 1526 | "quote", 1527 | "syn 2.0.104", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "tracing-core" 1532 | version = "0.1.34" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 1535 | dependencies = [ 1536 | "once_cell", 1537 | "valuable", 1538 | ] 1539 | 1540 | [[package]] 1541 | name = "tracing-serde" 1542 | version = "0.1.3" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" 1545 | dependencies = [ 1546 | "serde", 1547 | "tracing-core", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "tracing-subscriber" 1552 | version = "0.3.18" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" 1555 | dependencies = [ 1556 | "matchers", 1557 | "once_cell", 1558 | "regex", 1559 | "serde", 1560 | "serde_json", 1561 | "sharded-slab", 1562 | "thread_local", 1563 | "tracing", 1564 | "tracing-core", 1565 | "tracing-serde", 1566 | ] 1567 | 1568 | [[package]] 1569 | name = "try-lock" 1570 | version = "0.2.5" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 1573 | 1574 | [[package]] 1575 | name = "unicode-ident" 1576 | version = "1.0.12" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 1579 | 1580 | [[package]] 1581 | name = "untrusted" 1582 | version = "0.9.0" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 1585 | 1586 | [[package]] 1587 | name = "url" 1588 | version = "2.5.4" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 1591 | dependencies = [ 1592 | "form_urlencoded", 1593 | "idna", 1594 | "percent-encoding", 1595 | ] 1596 | 1597 | [[package]] 1598 | name = "utf8_iter" 1599 | version = "1.0.4" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 1602 | 1603 | [[package]] 1604 | name = "valuable" 1605 | version = "0.1.1" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 1608 | 1609 | [[package]] 1610 | name = "vcpkg" 1611 | version = "0.2.15" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 1614 | 1615 | [[package]] 1616 | name = "vercel_runtime" 1617 | version = "1.1.6" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "49198a1bdaa733f727d773a33937a8a6101f56211ff6af90697b221dc4c86ecd" 1620 | dependencies = [ 1621 | "async-trait", 1622 | "base64", 1623 | "bytes", 1624 | "http-serde", 1625 | "lambda_http", 1626 | "lambda_runtime", 1627 | "serde", 1628 | "serde_json", 1629 | "tokio", 1630 | "tower-http", 1631 | "tower-service", 1632 | "tracing", 1633 | "tracing-subscriber", 1634 | "vercel_runtime_macro", 1635 | "vercel_runtime_router", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "vercel_runtime_macro" 1640 | version = "1.1.6" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "1aaa8d10230a06516f91f0b40088d59a7e1bd1058a5a5b710316f407a286e5c4" 1643 | dependencies = [ 1644 | "glob", 1645 | "quote", 1646 | "syn 1.0.109", 1647 | "vercel_runtime_router", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "vercel_runtime_router" 1652 | version = "1.1.6" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "9a746111c8d5b8f2111548e81c8a00ccfa60646bd92b6442bcfbb882e6b63652" 1655 | dependencies = [ 1656 | "glob", 1657 | "lazy_static", 1658 | "quote", 1659 | "regex", 1660 | "syn 2.0.104", 1661 | ] 1662 | 1663 | [[package]] 1664 | name = "want" 1665 | version = "0.3.1" 1666 | source = "registry+https://github.com/rust-lang/crates.io-index" 1667 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 1668 | dependencies = [ 1669 | "try-lock", 1670 | ] 1671 | 1672 | [[package]] 1673 | name = "wasi" 1674 | version = "0.11.0+wasi-snapshot-preview1" 1675 | source = "registry+https://github.com/rust-lang/crates.io-index" 1676 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1677 | 1678 | [[package]] 1679 | name = "wasm-bindgen" 1680 | version = "0.2.100" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 1683 | dependencies = [ 1684 | "cfg-if", 1685 | "once_cell", 1686 | "rustversion", 1687 | "wasm-bindgen-macro", 1688 | ] 1689 | 1690 | [[package]] 1691 | name = "wasm-bindgen-backend" 1692 | version = "0.2.100" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 1695 | dependencies = [ 1696 | "bumpalo", 1697 | "log", 1698 | "proc-macro2", 1699 | "quote", 1700 | "syn 2.0.104", 1701 | "wasm-bindgen-shared", 1702 | ] 1703 | 1704 | [[package]] 1705 | name = "wasm-bindgen-futures" 1706 | version = "0.4.42" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 1709 | dependencies = [ 1710 | "cfg-if", 1711 | "js-sys", 1712 | "wasm-bindgen", 1713 | "web-sys", 1714 | ] 1715 | 1716 | [[package]] 1717 | name = "wasm-bindgen-macro" 1718 | version = "0.2.100" 1719 | source = "registry+https://github.com/rust-lang/crates.io-index" 1720 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 1721 | dependencies = [ 1722 | "quote", 1723 | "wasm-bindgen-macro-support", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "wasm-bindgen-macro-support" 1728 | version = "0.2.100" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 1731 | dependencies = [ 1732 | "proc-macro2", 1733 | "quote", 1734 | "syn 2.0.104", 1735 | "wasm-bindgen-backend", 1736 | "wasm-bindgen-shared", 1737 | ] 1738 | 1739 | [[package]] 1740 | name = "wasm-bindgen-shared" 1741 | version = "0.2.100" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 1744 | dependencies = [ 1745 | "unicode-ident", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "web-sys" 1750 | version = "0.3.69" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 1753 | dependencies = [ 1754 | "js-sys", 1755 | "wasm-bindgen", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "windows-link" 1760 | version = "0.1.3" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 1763 | 1764 | [[package]] 1765 | name = "windows-registry" 1766 | version = "0.5.3" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 1769 | dependencies = [ 1770 | "windows-link", 1771 | "windows-result", 1772 | "windows-strings", 1773 | ] 1774 | 1775 | [[package]] 1776 | name = "windows-result" 1777 | version = "0.3.4" 1778 | source = "registry+https://github.com/rust-lang/crates.io-index" 1779 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 1780 | dependencies = [ 1781 | "windows-link", 1782 | ] 1783 | 1784 | [[package]] 1785 | name = "windows-strings" 1786 | version = "0.4.2" 1787 | source = "registry+https://github.com/rust-lang/crates.io-index" 1788 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 1789 | dependencies = [ 1790 | "windows-link", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "windows-sys" 1795 | version = "0.52.0" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1798 | dependencies = [ 1799 | "windows-targets", 1800 | ] 1801 | 1802 | [[package]] 1803 | name = "windows-sys" 1804 | version = "0.59.0" 1805 | source = "registry+https://github.com/rust-lang/crates.io-index" 1806 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1807 | dependencies = [ 1808 | "windows-targets", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "windows-targets" 1813 | version = "0.52.6" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1816 | dependencies = [ 1817 | "windows_aarch64_gnullvm", 1818 | "windows_aarch64_msvc", 1819 | "windows_i686_gnu", 1820 | "windows_i686_gnullvm", 1821 | "windows_i686_msvc", 1822 | "windows_x86_64_gnu", 1823 | "windows_x86_64_gnullvm", 1824 | "windows_x86_64_msvc", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "windows_aarch64_gnullvm" 1829 | version = "0.52.6" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1832 | 1833 | [[package]] 1834 | name = "windows_aarch64_msvc" 1835 | version = "0.52.6" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1838 | 1839 | [[package]] 1840 | name = "windows_i686_gnu" 1841 | version = "0.52.6" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1844 | 1845 | [[package]] 1846 | name = "windows_i686_gnullvm" 1847 | version = "0.52.6" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1850 | 1851 | [[package]] 1852 | name = "windows_i686_msvc" 1853 | version = "0.52.6" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1856 | 1857 | [[package]] 1858 | name = "windows_x86_64_gnu" 1859 | version = "0.52.6" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1862 | 1863 | [[package]] 1864 | name = "windows_x86_64_gnullvm" 1865 | version = "0.52.6" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1868 | 1869 | [[package]] 1870 | name = "windows_x86_64_msvc" 1871 | version = "0.52.6" 1872 | source = "registry+https://github.com/rust-lang/crates.io-index" 1873 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1874 | 1875 | [[package]] 1876 | name = "writeable" 1877 | version = "0.6.1" 1878 | source = "registry+https://github.com/rust-lang/crates.io-index" 1879 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 1880 | 1881 | [[package]] 1882 | name = "yoke" 1883 | version = "0.8.0" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 1886 | dependencies = [ 1887 | "serde", 1888 | "stable_deref_trait", 1889 | "yoke-derive", 1890 | "zerofrom", 1891 | ] 1892 | 1893 | [[package]] 1894 | name = "yoke-derive" 1895 | version = "0.8.0" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 1898 | dependencies = [ 1899 | "proc-macro2", 1900 | "quote", 1901 | "syn 2.0.104", 1902 | "synstructure", 1903 | ] 1904 | 1905 | [[package]] 1906 | name = "zerofrom" 1907 | version = "0.1.6" 1908 | source = "registry+https://github.com/rust-lang/crates.io-index" 1909 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 1910 | dependencies = [ 1911 | "zerofrom-derive", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "zerofrom-derive" 1916 | version = "0.1.6" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 1919 | dependencies = [ 1920 | "proc-macro2", 1921 | "quote", 1922 | "syn 2.0.104", 1923 | "synstructure", 1924 | ] 1925 | 1926 | [[package]] 1927 | name = "zeroize" 1928 | version = "1.8.1" 1929 | source = "registry+https://github.com/rust-lang/crates.io-index" 1930 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 1931 | 1932 | [[package]] 1933 | name = "zerotrie" 1934 | version = "0.2.2" 1935 | source = "registry+https://github.com/rust-lang/crates.io-index" 1936 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 1937 | dependencies = [ 1938 | "displaydoc", 1939 | "yoke", 1940 | "zerofrom", 1941 | ] 1942 | 1943 | [[package]] 1944 | name = "zerovec" 1945 | version = "0.11.2" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" 1948 | dependencies = [ 1949 | "yoke", 1950 | "zerofrom", 1951 | "zerovec-derive", 1952 | ] 1953 | 1954 | [[package]] 1955 | name = "zerovec-derive" 1956 | version = "0.11.1" 1957 | source = "registry+https://github.com/rust-lang/crates.io-index" 1958 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 1959 | dependencies = [ 1960 | "proc-macro2", 1961 | "quote", 1962 | "syn 2.0.104", 1963 | ] 1964 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "next-rust" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | tokio = { version = "1", features = ["macros"] } 8 | serde_json = { version = "1", features = ["raw_value"] } 9 | # Documentation: https://docs.rs/vercel_runtime/latest/vercel_runtime 10 | vercel_runtime = { version = "1.1.6" } 11 | url = "2.5.4" 12 | reqwest = { version = "0.12.22", features = ["blocking", "json"] } 13 | dotenv = "0.15.0" 14 | serde = { version = "1.0", features = ["derive"] } 15 | 16 | # libs 17 | [lib] 18 | path = "src/rs/utils.rs" 19 | 20 | # Each handler has to be specified as [[bin]] 21 | # Note that you need to provide unique names for each binary 22 | 23 | [[bin]] 24 | name = "crab" 25 | path = "api/crab.rs" 26 | 27 | [[bin]] 28 | name = "examples-cache" 29 | path = "api/examples/cache.rs" 30 | 31 | [[bin]] 32 | name = "examples-params" 33 | path = "api/examples/params.rs" 34 | 35 | [[bin]] 36 | name = "examples-env" 37 | path = "api/examples/env.rs" 38 | 39 | [[bin]] 40 | name = "examples-error" 41 | path = "api/examples/error.rs" 42 | 43 | [[bin]] 44 | name = "examples-create" 45 | path = "api/examples/create.rs" 46 | 47 | [[bin]] 48 | name = "examples-beer" 49 | path = "api/examples/beer.rs" 50 | -------------------------------------------------------------------------------- /FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: capJavert 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Next.js + Rust template 2 | 3 | Learn how to use Rust in your existing JavaScript/Next.js projects and discover how to deploy Rust to production on Vercel. 4 | 5 | You can use this template to get started writing Rust code in your Next.js project. 6 | 7 | Read my blog post [Integrating Rust into Next.js: How-To Developer Guide](https://medium.com/@capJavert/integrating-rust-into-next-js-how-to-developer-guide-10e533470d71) for more info. 8 | 9 | ![Rust programming language logo on the right and Next.js logo on the right](public/cover.jpg) 10 | 11 | ### Examples 12 | 13 | Check out `/api/examples` folder for different examples of how to use Rust in your Next.js project. 14 | 15 | All examples are deployed under `/api/examples/*` eg. https://next-rust-lake.vercel.app/api/examples/beer. 16 | 17 | --- 18 | 19 | Running Rust in Next.js is powered by [Rust Runtime from Vercel Community](https://github.com/vercel-community/rust) ❤️ 20 | -------------------------------------------------------------------------------- /api/crab.rs: -------------------------------------------------------------------------------- 1 | use serde_json::json; 2 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 3 | 4 | #[tokio::main] 5 | async fn main() -> Result<(), Error> { 6 | run(handler).await 7 | } 8 | 9 | pub async fn handler(_req: Request) -> Result, Error> { 10 | Ok(Response::builder() 11 | .status(StatusCode::OK) 12 | .header("Content-Type", "application/json") 13 | .body( 14 | json!({ "message": "crab is the best!" }).to_string() 15 | .into(), 16 | )?) 17 | } 18 | -------------------------------------------------------------------------------- /api/examples/beer.rs: -------------------------------------------------------------------------------- 1 | use next_rust::throw_error; 2 | use serde_json::json; 3 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 4 | 5 | #[tokio::main] 6 | async fn main() -> Result<(), Error> { 7 | run(handler).await 8 | } 9 | 10 | pub async fn handler(_req: Request) -> Result, Error> { 11 | let response = reqwest::blocking::get("https://api.punkapi.com/v2/beers/random")?; 12 | let beers = response.json::()?; 13 | 14 | let beer = match beers.get(0) { 15 | Some(beer) => beer, 16 | None => return Ok(throw_error!("no beer found", None, StatusCode::NOT_FOUND)?), 17 | }; 18 | 19 | Ok(Response::builder() 20 | .status(StatusCode::OK) 21 | .header("Content-Type", "application/json") 22 | .header( 23 | "Cache-Control", 24 | format!( 25 | "public, max-age=0, must-revalidate, s-maxage={s_maxage}", 26 | s_maxage = 24 * 60 * 60 27 | ), 28 | ) 29 | .body(json!(beer).to_string().into())?) 30 | } 31 | -------------------------------------------------------------------------------- /api/examples/cache.rs: -------------------------------------------------------------------------------- 1 | use serde_json::json; 2 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 3 | 4 | #[tokio::main] 5 | async fn main() -> Result<(), Error> { 6 | run(handler).await 7 | } 8 | 9 | pub async fn handler(_req: Request) -> Result, Error> { 10 | Ok(Response::builder() 11 | .status(StatusCode::OK) 12 | .header("Content-Type", "application/json") 13 | .header( 14 | "Cache-Control", 15 | format!( 16 | // cache for 1 hours on CDN 17 | "public, max-age=0, must-revalidate, s-maxage={s_maxage}", 18 | s_maxage = 1 * 60 * 60 19 | ), 20 | ) 21 | .body(json!({ "message": "this is cached!" }).to_string().into())?) 22 | } 23 | -------------------------------------------------------------------------------- /api/examples/create.rs: -------------------------------------------------------------------------------- 1 | use next_rust::throw_error; 2 | use reqwest::Method; 3 | use serde::Deserialize; 4 | use serde_json::json; 5 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 6 | 7 | #[tokio::main] 8 | async fn main() -> Result<(), Error> { 9 | run(handler).await 10 | } 11 | 12 | #[derive(Debug, Deserialize)] 13 | struct CreatePayload { 14 | name: String, 15 | } 16 | 17 | fn route_post(_req: Request) -> Result, Error> { 18 | let body: CreatePayload = match serde_json::from_slice(_req.body()) { 19 | Ok(body) => body, 20 | Err(_) => { 21 | return Ok(throw_error!( 22 | "invalid request body", 23 | None, 24 | StatusCode::BAD_REQUEST 25 | )?); 26 | } 27 | }; 28 | 29 | if body.name.trim().is_empty() { 30 | return Ok(throw_error!( 31 | "name is required", 32 | None, 33 | StatusCode::BAD_REQUEST 34 | )?); 35 | } 36 | 37 | Ok(Response::builder() 38 | .status(StatusCode::CREATED) 39 | .header("Content-Type", "application/json") 40 | .body( 41 | json!({ "message": format!("created {name}!", name=body.name) }) 42 | .to_string() 43 | .into(), 44 | )?) 45 | } 46 | 47 | pub async fn handler(_req: Request) -> Result, Error> { 48 | let response = match _req.method().to_owned() { 49 | Method::POST => route_post(_req), 50 | _ => { 51 | return Ok(throw_error!( 52 | "method not allowed", 53 | None, 54 | StatusCode::METHOD_NOT_ALLOWED 55 | )?); 56 | } 57 | }; 58 | 59 | return response; 60 | } 61 | -------------------------------------------------------------------------------- /api/examples/env.rs: -------------------------------------------------------------------------------- 1 | use serde_json::json; 2 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 3 | 4 | #[tokio::main] 5 | async fn main() -> Result<(), Error> { 6 | run(handler).await 7 | } 8 | 9 | pub async fn handler(_req: Request) -> Result, Error> { 10 | Ok(Response::builder() 11 | .status(StatusCode::OK) 12 | .header("Content-Type", "application/json") 13 | .body( 14 | json!({ 15 | "vercelEnv": dotenv::var("VERCEL_ENV").unwrap_or("development".to_string()), 16 | }) 17 | .to_string() 18 | .into(), 19 | )?) 20 | } 21 | -------------------------------------------------------------------------------- /api/examples/error.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | 3 | use next_rust::throw_error; 4 | use serde_json::json; 5 | use url::Url; 6 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 7 | 8 | #[tokio::main] 9 | async fn main() -> Result<(), Error> { 10 | run(handler).await 11 | } 12 | 13 | pub async fn handler(_req: Request) -> Result, Error> { 14 | let url = Url::parse(&_req.uri().to_string()).unwrap(); 15 | let query_params = url 16 | .query_pairs() 17 | .into_owned() 18 | .collect::>(); 19 | 20 | let q = match query_params.get("q") { 21 | Some(value) => value, 22 | None => "", 23 | }; 24 | 25 | if q.is_empty() { 26 | return Ok(throw_error!( 27 | "query param 'q' is required", 28 | None, 29 | StatusCode::BAD_REQUEST 30 | )?); 31 | } 32 | 33 | Ok(Response::builder() 34 | .status(StatusCode::OK) 35 | .header("Content-Type", "application/json") 36 | .body( 37 | json!({ 38 | "message": format!("You searched for '{q}'", q=q) 39 | }) 40 | .to_string() 41 | .into(), 42 | )?) 43 | } 44 | -------------------------------------------------------------------------------- /api/examples/params.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | 3 | use serde_json::json; 4 | use url::Url; 5 | use vercel_runtime::{run, Body, Error, Request, Response, StatusCode}; 6 | 7 | #[tokio::main] 8 | async fn main() -> Result<(), Error> { 9 | run(handler).await 10 | } 11 | 12 | pub async fn handler(_req: Request) -> Result, Error> { 13 | // reading incoming req headers 14 | let headers = _req.headers(); 15 | let user_agent = match headers.get("user-agent") { 16 | Some(value) => value.to_str().unwrap(), 17 | None => "unknown", 18 | }; 19 | 20 | // parsing req url and path 21 | let url = Url::parse(&_req.uri().to_string()).unwrap(); 22 | 23 | // read url query params 24 | let query_params = url 25 | .query_pairs() 26 | .into_owned() 27 | .collect::>(); 28 | 29 | // open /api/examples/params?q=test in your browser 30 | // and you will see the params in the response 31 | Ok(Response::builder() 32 | .status(StatusCode::OK) 33 | .header("Content-Type", "application/json") 34 | .body( 35 | json!({ 36 | "path": url.path(), 37 | "query": { 38 | "q": query_params.get("q") 39 | }, 40 | "headers": { 41 | "userAgent": user_agent 42 | } }) 43 | .to_string() 44 | .into(), 45 | )?) 46 | } 47 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | rewrites: async () => { 4 | const rewrites = { 5 | afterFiles: [ 6 | // apply any of your existing rewrites here 7 | ], 8 | fallback: [] 9 | } 10 | 11 | // dev only, this allows for local api calls to be proxied to 12 | // api routes that use rust runtime 13 | if (process.env.NODE_ENV === 'development') { 14 | rewrites.fallback.push({ 15 | source: '/api/:path*', 16 | destination: 'http://0.0.0.0:3001/api/:path*' 17 | }) 18 | } 19 | 20 | return rewrites 21 | }, 22 | redirects: async () => { 23 | return [ 24 | { 25 | source: '/', 26 | // read my article for more info about this template 27 | destination: 'https://medium.com/@capJavert/integrating-rust-into-next-js-how-to-developer-guide-10e533470d71', 28 | permanent: false 29 | } 30 | ] 31 | } 32 | } 33 | 34 | module.exports = nextConfig 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-rust", 3 | "description": "Next.js + Rust template", 4 | "version": "0.1.0", 5 | "private": true, 6 | "scripts": { 7 | "dev": "next dev & npm run dev:rust", 8 | "build": "next build", 9 | "start": "next start", 10 | "lint": "next lint", 11 | "dev:rust": "vercel dev --listen 3001" 12 | }, 13 | "dependencies": { 14 | "@types/node": "22.x", 15 | "@types/react": "19.1.8", 16 | "@types/react-dom": "19.1.6", 17 | "eslint": "8.57.0", 18 | "eslint-config-next": "15.4.1", 19 | "next": "15.4.1", 20 | "react": "19.1.0", 21 | "react-dom": "19.1.0", 22 | "typescript": "5.8.3" 23 | }, 24 | "volta": { 25 | "node": "22.13.1" 26 | }, 27 | "author": "capJavert", 28 | "devDependencies": { 29 | "vercel": "^44.4.3" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /public/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capJavert/next-rust/ce5614e5cb9ea36adb4f62e0b9532817b0eb0a5d/public/cover.jpg -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/capJavert/next-rust/ce5614e5cb9ea36adb4f62e0b9532817b0eb0a5d/public/favicon.ico -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --max-width: 1100px; 3 | --border-radius: 12px; 4 | --font-mono: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', 5 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', 6 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; 7 | 8 | --foreground-rgb: 0, 0, 0; 9 | --background-start-rgb: 214, 219, 220; 10 | --background-end-rgb: 255, 255, 255; 11 | 12 | --primary-glow: conic-gradient( 13 | from 180deg at 50% 50%, 14 | #16abff33 0deg, 15 | #0885ff33 55deg, 16 | #54d6ff33 120deg, 17 | #0071ff33 160deg, 18 | transparent 360deg 19 | ); 20 | --secondary-glow: radial-gradient( 21 | rgba(255, 255, 255, 1), 22 | rgba(255, 255, 255, 0) 23 | ); 24 | 25 | --tile-start-rgb: 239, 245, 249; 26 | --tile-end-rgb: 228, 232, 233; 27 | --tile-border: conic-gradient( 28 | #00000080, 29 | #00000040, 30 | #00000030, 31 | #00000020, 32 | #00000010, 33 | #00000010, 34 | #00000080 35 | ); 36 | 37 | --callout-rgb: 238, 240, 241; 38 | --callout-border-rgb: 172, 175, 176; 39 | --card-rgb: 180, 185, 188; 40 | --card-border-rgb: 131, 134, 135; 41 | } 42 | 43 | @media (prefers-color-scheme: dark) { 44 | :root { 45 | --foreground-rgb: 255, 255, 255; 46 | --background-start-rgb: 0, 0, 0; 47 | --background-end-rgb: 0, 0, 0; 48 | 49 | --primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0)); 50 | --secondary-glow: linear-gradient( 51 | to bottom right, 52 | rgba(1, 65, 255, 0), 53 | rgba(1, 65, 255, 0), 54 | rgba(1, 65, 255, 0.3) 55 | ); 56 | 57 | --tile-start-rgb: 2, 13, 46; 58 | --tile-end-rgb: 2, 5, 19; 59 | --tile-border: conic-gradient( 60 | #ffffff80, 61 | #ffffff40, 62 | #ffffff30, 63 | #ffffff20, 64 | #ffffff10, 65 | #ffffff10, 66 | #ffffff80 67 | ); 68 | 69 | --callout-rgb: 20, 20, 20; 70 | --callout-border-rgb: 108, 108, 108; 71 | --card-rgb: 100, 100, 100; 72 | --card-border-rgb: 200, 200, 200; 73 | } 74 | } 75 | 76 | * { 77 | box-sizing: border-box; 78 | padding: 0; 79 | margin: 0; 80 | } 81 | 82 | html, 83 | body { 84 | max-width: 100vw; 85 | overflow-x: hidden; 86 | } 87 | 88 | body { 89 | color: rgb(var(--foreground-rgb)); 90 | background: linear-gradient( 91 | to bottom, 92 | transparent, 93 | rgb(var(--background-end-rgb)) 94 | ) 95 | rgb(var(--background-start-rgb)); 96 | } 97 | 98 | a { 99 | color: inherit; 100 | text-decoration: none; 101 | } 102 | 103 | @media (prefers-color-scheme: dark) { 104 | html { 105 | color-scheme: dark; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './globals.css' 2 | 3 | export default function RootLayout({ 4 | children, 5 | }: { 6 | children: React.ReactNode 7 | }) { 8 | return ( 9 | 10 | {/* 11 | will contain the components returned by the nearest parent 12 | head.tsx. Find out more at https://beta.nextjs.org/docs/api-reference/file-conventions/head 13 | */} 14 | 15 | {children} 16 | 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /src/rs/utils.rs: -------------------------------------------------------------------------------- 1 | use serde_json::json; 2 | use vercel_runtime::{Body, Error, Response, StatusCode}; 3 | 4 | pub fn throw_error( 5 | message: &str, 6 | error: Option, 7 | status_code: StatusCode, 8 | ) -> Result, Error> { 9 | if let Some(error) = error { 10 | eprintln!("error: {error}"); 11 | } 12 | 13 | Ok(Response::builder() 14 | .status(status_code) 15 | .header("Content-Type", "application/json") 16 | .body( 17 | json!( 18 | { 19 | "message": message 20 | } 21 | ) 22 | .to_string() 23 | .into(), 24 | )?) 25 | } 26 | 27 | #[macro_export] 28 | macro_rules! throw_error { 29 | ($message:expr, $error:expr) => { 30 | throw_error($message, $error, StatusCode::INTERNAL_SERVER_ERROR) 31 | }; 32 | ($message:expr) => { 33 | throw_error($message, None, StatusCode::INTERNAL_SERVER_ERROR) 34 | }; 35 | ($message:expr, $error:expr, $status_code:expr) => { 36 | throw_error($message, $error, $status_code) 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true, 17 | "plugins": [ 18 | { 19 | "name": "next" 20 | } 21 | ], 22 | "baseUrl": ".", 23 | "paths": { 24 | "@/*": ["./src/*"] 25 | } 26 | }, 27 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], 28 | "exclude": ["node_modules"] 29 | } 30 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "api/**/*.rs": { 4 | "runtime": "vercel-rust@4.0.9" 5 | } 6 | } 7 | } 8 | --------------------------------------------------------------------------------