diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7032cf9..d2b2808 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: toolchain: stable diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index a3d5c61..fd1f1f2 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -9,7 +9,7 @@ jobs: cover: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: toolchain: stable diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e3c7865..231a0e4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,17 +10,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Get version run: echo PACKAGE_VERSION=$(sed -nE 's/^\s*version = "(.*?)"/\1/p' Cargo.toml) >> $GITHUB_ENV - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and push - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: push: true context: . @@ -36,22 +36,22 @@ jobs: needs: graphgate-docker steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and push ${{ matrix.package.name }} - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: push: true context: . file: Dockerfile-examples tags: scott829/graphgate-examples:latest - name: Deploy to Kubernetes - uses: WyriHaximus/github-action-helm3@v2 + uses: WyriHaximus/github-action-helm3@v3 with: kubeconfig: '${{ secrets.K8S_CONFIG }}' exec: | @@ -62,15 +62,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Login to DockerHub - uses: docker/login-action@v1 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_TOKEN }} - name: Build and push ${{ matrix.package.name }} - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v5 with: push: true context: . @@ -101,7 +101,7 @@ jobs: path: . steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: get version working-directory: ${{ matrix.package.path }} run: echo PACKAGE_VERSION=$(sed -nE 's/^\s*version = "(.*?)"/\1/p' Cargo.toml) >> $GITHUB_ENV diff --git a/.rustfmt.toml b/.rustfmt.toml new file mode 100644 index 0000000..995c2bb --- /dev/null +++ b/.rustfmt.toml @@ -0,0 +1,9 @@ +edition = "2021" +newline_style = "Unix" +# comments +normalize_comments = true +wrap_comments = true +format_code_in_doc_comments = true +# imports +imports_granularity = "Crate" +group_imports = "StdExternalCrate" \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index a6ac673..c72674f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,6 +12,15 @@ dependencies = [ "regex", ] +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -20,28 +29,43 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab" dependencies = [ "memchr", ] [[package]] name = "alloc-no-stdlib" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] name = "alloc-stdlib" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ "alloc-no-stdlib", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -53,9 +77,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.52" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "ascii_utils" @@ -65,9 +89,9 @@ checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" [[package]] name = "async-compression" -version = "0.3.8" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443ccbb270374a2b1055fc72da40e1f237809cd6bb0e97e66d264cd138473a6" +checksum = "bb42b2197bf15ccb092b62c74515dbd8b86d0effd934795f6687c93b6e679a2c" dependencies = [ "brotli", "flate2", @@ -79,22 +103,24 @@ dependencies = [ [[package]] name = "async-graphql" -version = "3.0.24" +version = "6.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e490911c46c7137d3734a1a2a5081692883aff2962a631681841d63adedff45a" +checksum = "1addb0b551c59640e15de99e7566a4e3a1186cf42269e160c485ba6d8b43fe30" dependencies = [ "async-graphql-derive", "async-graphql-parser", "async-graphql-value", "async-stream", "async-trait", + "base64 0.13.1", "bytes", "chrono", "fast_chemail", "fnv", "futures-util", + "handlebars", "http", - "indexmap", + "indexmap 2.0.2", "mime", "multer", "num-traits", @@ -103,6 +129,7 @@ dependencies = [ "regex", "serde", "serde_json", + "serde_urlencoded", "static_assertions", "tempfile", "thiserror", @@ -110,50 +137,50 @@ dependencies = [ [[package]] name = "async-graphql-derive" -version = "3.0.24" +version = "6.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd021f09de80e7c467d3cd2b49c87c2d429dda5c927611b8f01627715dfe593" +checksum = "1e1121ff0be2feea705c24f6940162c4f14a077e50a217b16e091e6534a8c08a" dependencies = [ "Inflector", "async-graphql-parser", - "darling", + "darling 0.20.3", "proc-macro-crate", "proc-macro2", "quote", - "syn", + "strum", + "syn 2.0.38", "thiserror", ] [[package]] name = "async-graphql-parser" -version = "3.0.24" +version = "6.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ba09b75178a27a511e4ff949c567ef56fbd2e6b77aa7fb603259d1b913bedda" +checksum = "e0b6713fd4ffd610b8b6f6e911bf31277cbb84b7c2a9cdeeb39d1b3eed3b88e4" dependencies = [ "async-graphql-value", "pest", - "pest_derive", "serde", "serde_json", ] [[package]] name = "async-graphql-value" -version = "3.0.24" +version = "6.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1da94bc70eaae0c12aaaa17f8b8fcfd8d259dda400847d5594f401f91e617cd" +checksum = "f7d74240f9daa8c1e8f73e9cfcc338d20a88d00bbeb83ded49ce8e5b4dcec0f5" dependencies = [ "bytes", - "indexmap", + "indexmap 2.0.2", "serde", "serde_json", ] [[package]] name = "async-graphql-warp" -version = "3.0.24" +version = "6.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4710bd0072ce2a3f9708ca7d3f585a61b6c3b88732951bd5aa899d7cd2635eb8" +checksum = "7943123dbcfa253fae634f6cc3d02295ce9d11ed4bf09f138ee99ecb88c1fbcf" dependencies = [ "async-graphql", "futures-util", @@ -163,34 +190,35 @@ dependencies = [ [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" dependencies = [ "async-stream-impl", "futures-core", + "pin-project-lite", ] [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] @@ -199,22 +227,49 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.13.0" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + +[[package]] +name = "base64" +version = "0.21.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" [[package]] name = "bitflags" @@ -223,40 +278,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "block-buffer" -version = "0.7.3" +name = "bitflags" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" -dependencies = [ - "block-padding", - "byte-tools", - "byteorder", - "generic-array 0.12.4", -] +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array 0.14.5", -] - -[[package]] -name = "block-padding" -version = "0.1.5" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "byte-tools", + "generic-array", ] [[package]] name = "brotli" -version = "3.3.3" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838e47a451d5a8fa552371f80024dd6ace9b7acdf25c4c3d0f9bc6816fb1c39" +checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -265,9 +305,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.3.2" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80" +checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -275,55 +315,43 @@ dependencies = [ [[package]] name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "memchr", -] - -[[package]] -name = "buf_redux" -version = "0.8.4" +version = "1.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" +checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a" dependencies = [ "memchr", - "safemem", + "serde", ] [[package]] name = "bumpalo" -version = "3.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" - -[[package]] -name = "byte-tools" -version = "0.3.1" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.1.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] [[package]] name = "cc" -version = "1.0.72" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -333,16 +361,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.19" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" dependencies = [ - "libc", - "num-integer", + "android-tzdata", + "iana-time-zone", + "js-sys", "num-traits", "serde", - "time", - "winapi", + "wasm-bindgen", + "windows-targets", ] [[package]] @@ -353,7 +382,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim 0.8.0", "textwrap", "unicode-width", @@ -362,9 +391,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6888e10551bb93e424d8df1d07f1a8b4fceb0001a3a4b048bfc47554946f47b3" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -372,33 +401,33 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.2" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e54ea8bc3fb1ee042f5aace6e3c6e025d3874866da222930f70ce62aceba0bfa" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -406,124 +435,156 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.6" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcae03edb34f947e64acdb1c33ec169824e20657e9ecb61cef6c8c74dcb8120" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" dependencies = [ "cfg-if", - "lazy_static", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", ] [[package]] name = "darling" -version = "0.13.1" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core 0.14.4", + "darling_macro 0.14.4", +] + +[[package]] +name = "darling" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0d720b8683f8dd83c65155f0530560cba68cd2bf395f6513a483caee57ff7f4" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ - "darling_core", - "darling_macro", + "darling_core 0.20.3", + "darling_macro 0.20.3", ] [[package]] name = "darling_core" -version = "0.13.1" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a340f241d2ceed1deb47ae36c4144b2707ec7dd0b649f894cb39bb595986324" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim 0.10.0", - "syn", + "syn 1.0.109", ] [[package]] -name = "darling_macro" -version = "0.13.1" +name = "darling_core" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c41b3b7352feb3211a0d743dc5700a4e3b60f51bd2b368892d1e0f9a95f44b" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ - "darling_core", + "fnv", + "ident_case", + "proc-macro2", "quote", - "syn", -] - -[[package]] -name = "dashmap" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" -dependencies = [ - "cfg-if", - "num_cpus", + "strsim 0.10.0", + "syn 2.0.38", ] [[package]] -name = "digest" -version = "0.8.1" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "generic-array 0.12.4", + "darling_core 0.14.4", + "quote", + "syn 1.0.109", ] [[package]] -name = "digest" -version = "0.9.0" +name = "darling_macro" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ - "generic-array 0.14.5", + "darling_core 0.20.3", + "quote", + "syn 2.0.38", ] [[package]] -name = "dirs-next" -version = "2.0.0" +name = "data-encoding" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" [[package]] -name = "dirs-sys-next" -version = "0.1.2" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "libc", - "redox_users", - "winapi", + "block-buffer", + "crypto-common", ] [[package]] name = "dyn-clone" -version = "1.0.4" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2626afccd7561a06cf1367e2950c4718ea04565e20fb5029b6c7d8ad09abcf" +checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd" [[package]] name = "either" -version = "1.6.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding_rs" -version = "0.8.30" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] [[package]] -name = "fake-simd" +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add4f07d43996f76ef320709726a556a9d4f965d9410d8d0271132d2f8293480" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] [[package]] name = "fast_chemail" @@ -536,22 +597,17 @@ dependencies = [ [[package]] name = "fastrand" -version = "1.6.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" -dependencies = [ - "instant", -] +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ - "cfg-if", "crc32fast", - "libc", "miniz_oxide", ] @@ -563,25 +619,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" dependencies = [ - "matches", "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" - [[package]] name = "futures" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -594,9 +643,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -604,15 +653,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -621,38 +670,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-macro" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "futures-sink" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.19" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -668,18 +717,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.5" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -687,20 +727,26 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + [[package]] name = "globset" -version = "0.4.8" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd" +checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d" dependencies = [ "aho-corasick", "bstr", @@ -711,7 +757,7 @@ dependencies = [ [[package]] name = "graphgate" -version = "0.5.1" +version = "0.6.0" dependencies = [ "anyhow", "async-graphql", @@ -738,7 +784,7 @@ dependencies = [ [[package]] name = "graphgate-handler" -version = "0.5.1" +version = "0.6.0" dependencies = [ "anyhow", "async-graphql-parser", @@ -750,59 +796,58 @@ dependencies = [ "graphgate-planner", "graphgate-schema", "http", - "indexmap", + "indexmap 2.0.2", "once_cell", "opentelemetry", "reqwest", "serde", "serde_json", "tokio", - "tokio-stream", - "tokio-tungstenite 0.16.1", + "tokio-tungstenite", "tracing", "warp", ] [[package]] name = "graphgate-planner" -version = "0.5.1" +version = "0.6.0" dependencies = [ "async-graphql-parser", "async-graphql-value", "globset", "graphgate-schema", "graphgate-validation", - "indexmap", + "indexmap 2.0.2", "serde", "serde_json", ] [[package]] name = "graphgate-schema" -version = "0.5.1" +version = "0.6.0" dependencies = [ "async-graphql-parser", "async-graphql-value", - "indexmap", + "indexmap 2.0.2", "thiserror", ] [[package]] name = "graphgate-validation" -version = "0.5.0" +version = "0.6.0" dependencies = [ "async-graphql-parser", "async-graphql-value", "graphgate-schema", - "indexmap", + "indexmap 2.0.2", "once_cell", ] [[package]] name = "h2" -version = "0.3.10" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9de88456263e249e241fcd211d3954e2c9b0ef7ccfc235a444eb367cae3689" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -810,33 +855,52 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 1.9.3", "slab", "tokio", "tokio-util", "tracing", ] +[[package]] +name = "handlebars" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12" [[package]] name = "headers" -version = "0.3.5" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c4eb0471fcb85846d8b0690695ef354f9afb11cb03cac2e1d7c9253351afb0" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64", - "bitflags", + "base64 0.21.4", "bytes", "headers-core", "http", "httpdate", "mime", - "sha-1 0.9.8", + "sha1", ] [[package]] @@ -857,6 +921,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -866,22 +936,37 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys", +] + [[package]] name = "http" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.1", + "itoa", ] [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", @@ -890,27 +975,27 @@ dependencies = [ [[package]] name = "http-range-header" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.16" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -921,9 +1006,9 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 0.4.8", + "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -932,10 +1017,11 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ + "futures-util", "http", "hyper", "log", @@ -957,6 +1043,29 @@ dependencies = [ "tokio-io-timeout", ] +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -965,75 +1074,68 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.2.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] [[package]] name = "indexmap" -version = "1.8.0" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", - "serde", + "hashbrown 0.12.3", ] [[package]] -name = "instant" -version = "0.1.12" +name = "indexmap" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" dependencies = [ - "cfg-if", + "equivalent", + "hashbrown 0.14.1", + "serde", ] [[package]] name = "integer-encoding" -version = "1.1.7" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48dc51180a9b377fd75814d0cc02199c20f8e99433d6762f650d39cdbbd3b56f" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "ipnet" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" - -[[package]] -name = "itoa" -version = "0.4.8" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jemalloc-sys" -version = "0.3.2" +version = "0.5.4+5.3.0-patched" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3b9f3f5c9b31aa0f5ed3260385ac205db665baa41d49bb8338008ae94ede45" +checksum = "ac6c1946e1cea1788cbfde01c993b52a10e2da07f4bac608228d1bed20bfebf2" dependencies = [ "cc", - "fs_extra", "libc", ] [[package]] name = "jemallocator" -version = "0.3.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ae63fcfc45e99ab3d1b29a46782ad679e98436c3169d15a167a1108a724b69" +checksum = "a0de374a9f8e63150e6f5e8a60cc14c668226d7a347d8aee1a45766e3c4dd3bc" dependencies = [ "jemalloc-sys", "libc", @@ -1041,9 +1143,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.55" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" dependencies = [ "wasm-bindgen", ] @@ -1061,11 +1163,11 @@ dependencies = [ [[package]] name = "k8s-openapi" -version = "0.13.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f8de9873b904e74b3533f77493731ee26742418077503683db44e1b3c54aa5c" +checksum = "edc3606fd16aca7989db2f84bb25684d0270c6d6fa1dbcd0025af7b4130523a6" dependencies = [ - "base64", + "base64 0.21.4", "bytes", "chrono", "serde", @@ -1075,9 +1177,9 @@ dependencies = [ [[package]] name = "kube" -version = "0.66.0" +version = "0.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4b96944d327b752df4f62f3a31d8694892af06fb585747c0b5e664927823d1a" +checksum = "f8647c2211a9b480d910b155d573602c52cd5f646acecb06a03d594865dc4784" dependencies = [ "k8s-openapi", "kube-client", @@ -1087,16 +1189,16 @@ dependencies = [ [[package]] name = "kube-client" -version = "0.66.0" +version = "0.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "232db1af3d3680f9289cf0b4db51b2b9fee22550fc65d25869e39b23e0aaa696" +checksum = "af8952521f3e8ce11920229e5f2965fef70525aecd9efc7b65e39bf9e2c6f66d" dependencies = [ - "base64", + "base64 0.20.0", "bytes", "chrono", - "dirs-next", "either", "futures", + "home", "http", "http-body", "hyper", @@ -1123,9 +1225,9 @@ dependencies = [ [[package]] name = "kube-core" -version = "0.66.0" +version = "0.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de491f8c9ee97117e0b47a629753e939c2392d5d0a40f6928e582a5fba328098" +checksum = "7608a0cd05dfa36167d2da982bb70f17feb5450f73ec601f6d428bbcf991c5b9" dependencies = [ "chrono", "form_urlencoded", @@ -1140,15 +1242,15 @@ dependencies = [ [[package]] name = "kube-derive" -version = "0.66.0" +version = "0.86.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbb86bb3607245a67c8ad3a52aff41108f36b0d1e9e3e82ffb5760bfd84b965" +checksum = "a8dd623cf49cd632da4727a70e05d9cb948d5ea1098a1af49b1fd3bc9ec60b3c" dependencies = [ - "darling", + "darling 0.14.4", "proc-macro2", "quote", "serde_json", - "syn", + "syn 1.0.109", ] [[package]] @@ -1159,39 +1261,31 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.112" +version = "0.2.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" [[package]] -name = "linked-hash-map" -version = "0.5.4" +name = "linux-raw-sys" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88db" [[package]] name = "lock_api" -version = "0.4.5" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "matchers" @@ -1199,32 +1293,26 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" -version = "2.4.1" +version = "2.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mime_guess" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" +checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" dependencies = [ "mime", "unicase", @@ -1232,41 +1320,29 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.7.14" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", - "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "wasi", + "windows-sys", ] [[package]] name = "multer" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f8f35e687561d5c1667590911e6698a8cb714a134a7505718a182e7bc9d3836" +checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" dependencies = [ "bytes", "encoding_rs", @@ -1276,83 +1352,53 @@ dependencies = [ "log", "memchr", "mime", - "spin 0.9.2", + "spin 0.9.8", "version_check", ] [[package]] -name = "multipart" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" -dependencies = [ - "buf_redux", - "httparse", - "log", - "mime", - "mime_guess", - "quick-error", - "rand", - "safemem", - "tempfile", - "twoway", -] - -[[package]] -name = "ntapi" -version = "0.3.6" +name = "nu-ansi-term" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ + "overload", "winapi", ] -[[package]] -name = "num-integer" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg", - "num-traits", -] - [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.3", "libc", ] [[package]] -name = "once_cell" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" - -[[package]] -name = "opaque-debug" -version = "0.2.3" +name = "object" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] [[package]] -name = "opaque-debug" -version = "0.3.0" +name = "once_cell" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "openssl-probe" @@ -1362,67 +1408,87 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "opentelemetry" -version = "0.16.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf9b1c4e9a6c4de793c632496fa490bdc0e1eea73f0c91394f7b6990935d22" +checksum = "9591d937bc0e6d2feb6f71a559540ab300ea49955229c347a517a28d27784c54" dependencies = [ - "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", - "futures", - "js-sys", - "lazy_static", - "percent-encoding", - "pin-project", - "rand", - "thiserror", - "tokio", - "tokio-stream", + "opentelemetry_api", + "opentelemetry_sdk", ] [[package]] name = "opentelemetry-jaeger" -version = "0.15.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db22f492873ea037bc267b35a0e8e4fb846340058cb7c864efe3d0bf23684593" +checksum = "876958ba9084f390f913fcf04ddf7bbbb822898867bb0a51cc28f2b9e5c1b515" dependencies = [ "async-trait", - "lazy_static", + "futures-core", + "futures-util", "opentelemetry", "opentelemetry-semantic-conventions", - "thiserror", "thrift", "tokio", ] [[package]] name = "opentelemetry-prometheus" -version = "0.9.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ee9c06c1366665e7d4dba6540a42ea48900a9c92dc5b963f3ae05fbba76dc63" +checksum = "c7d81bc254e2d572120363a2b16cdb0d715d301b5789be0cfc26ad87e4e10e53" dependencies = [ - "opentelemetry", + "once_cell", + "opentelemetry_api", + "opentelemetry_sdk", "prometheus", "protobuf", ] [[package]] name = "opentelemetry-semantic-conventions" -version = "0.8.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffeac823339e8b0f27b961f4385057bf9f97f2863bc745bd015fd6091f2270e9" +checksum = "73c9f9340ad135068800e7f1b24e9e09ed9e7143f5bf8518ded3d3ec69789269" dependencies = [ "opentelemetry", ] [[package]] -name = "ordered-float" -version = "1.1.1" +name = "opentelemetry_api" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7" +checksum = "8a81f725323db1b1206ca3da8bb19874bbd3f57c3bcd59471bfb04525b265b9b" dependencies = [ - "num-traits", + "futures-channel", + "futures-util", + "indexmap 1.9.3", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8e705a0612d48139799fcbaba0d4a90f06277153e43dd2bdc16c6f0edd8026" +dependencies = [ + "async-trait", + "crossbeam-channel", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "ordered-float 3.9.1", + "percent-encoding", + "rand", + "regex", + "thiserror", + "tokio", + "tokio-stream", ] [[package]] @@ -1434,60 +1500,76 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ordered-float" +version = "3.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a54938017eacd63036332b4ae5c8a49fc8c0c1d6d629893057e4f13609edd06" +dependencies = [ + "num-traits", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "parking_lot" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "instant", "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" dependencies = [ "cfg-if", - "instant", "libc", "redox_syscall", "smallvec", - "winapi", + "windows-targets", ] [[package]] name = "pem" -version = "1.0.2" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9a3b09a20e374558580a4914d3b7d89bd61b954a5a5e1dcbea98753addb1947" +checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923" dependencies = [ - "base64", + "base64 0.21.4", + "serde", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "pest" -version = "2.1.3" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53" +checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4" dependencies = [ + "memchr", + "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.1.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0" +checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8" dependencies = [ "pest", "pest_generator", @@ -1495,53 +1577,53 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.1.3" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55" +checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "pest_meta" -version = "2.1.3" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d" +checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d" dependencies = [ - "maplit", + "once_cell", "pest", - "sha-1 0.8.2", + "sha2", ] [[package]] name = "pin-project" -version = "1.0.10" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -1551,18 +1633,18 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-crate" -version = "1.1.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" dependencies = [ - "thiserror", - "toml", + "once_cell", + "toml_edit 0.19.15", ] [[package]] @@ -1574,7 +1656,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -1591,18 +1673,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "5b1106fec09662ec6dd98ccac0f81cef56984d0b49f75c92d8cbad76e20c005c" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "prometheus" -version = "0.12.0" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5986aa8d62380092d2f50f8b1cdba9cb9b6731ffd4b25b51fd126b6c3e05b99c" +checksum = "449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8c" dependencies = [ "cfg-if", "fnv", @@ -1615,35 +1697,28 @@ dependencies = [ [[package]] name = "protobuf" -version = "2.25.2" +version = "2.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c327e191621a2158159df97cdbc2e7074bb4e940275e35abf38eb3d2595754" - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] name = "quote" -version = "1.0.14" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] @@ -1658,50 +1733,32 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core", -] - [[package]] name = "redox_syscall" -version = "0.2.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_users" -version = "0.4.0" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "getrandom", - "redox_syscall", + "bitflags 1.3.2", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", ] [[package]] @@ -1710,32 +1767,40 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "regex-syntax", + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", ] [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "regex-syntax" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" -version = "0.11.9" +version = "0.11.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" dependencies = [ "async-compression", - "base64", + "base64 0.21.4", "bytes", "encoding_rs", "futures-core", @@ -1747,9 +1812,9 @@ dependencies = [ "hyper-rustls", "ipnet", "js-sys", - "lazy_static", "log", "mime", + "once_cell", "percent-encoding", "pin-project-lite", "rustls", @@ -1757,9 +1822,11 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "system-configuration", "tokio", "tokio-rustls", "tokio-util", + "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1783,23 +1850,42 @@ dependencies = [ "winapi", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustix" +version = "0.38.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25469e9ae0f3d0047ca8b93fc56843f38e6774f0914a107ff8b41be8be8e0b7" +dependencies = [ + "bitflags 2.4.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + [[package]] name = "rustls" -version = "0.20.2" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37e5e2290f3e040b594b1a9e04377c2c671f1a1cfd9bfdef82106ac1c113f84" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" dependencies = [ "log", "ring", + "rustls-webpki", "sct", - "webpki", ] [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -1809,40 +1895,49 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64", + "base64 0.21.4", ] [[package]] -name = "ryu" -version = "1.0.9" +name = "rustls-webpki" +version = "0.101.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +dependencies = [ + "ring", + "untrusted", +] [[package]] -name = "safemem" -version = "0.3.3" +name = "rustversion" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "lazy_static", - "winapi", + "windows-sys", ] [[package]] name = "schemars" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b5a3c80cea1ab61f4260238409510e814e38b4b563c06044edf91e7dc070e3" +checksum = "1f7b0ce13155372a76ee2e1c5ffba1fe61ede73fbea5630d61eee6fac4929c0c" dependencies = [ "dyn-clone", "schemars_derive", @@ -1852,27 +1947,27 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.8" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ae4dce13e8614c46ac3c38ef1c0d668b101df6ac39817aebdaa26642ddae9b" +checksum = "e85e2a16b12bdb763244c69ab79363d71db2b4b918a2def53f80b02e0574b13c" dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn", + "syn 1.0.109", ] [[package]] name = "scoped-tls" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -1896,11 +1991,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.5.0" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d09d3c15d814eda1d6a836f2f2b56a6abc1446c8a34351cb3180d3db92ffe4ce" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -1909,9 +2004,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.5.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e90dd10c41c6bfc633da6e0c659bd25d31e0791e5974ac42970267d59eba87f7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -1919,9 +2014,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.133" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -1938,38 +2033,47 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.133" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "serde_derive_internals" -version = "0.25.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.75" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79" +checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" dependencies = [ - "indexmap", - "itoa 1.0.1", + "indexmap 2.0.2", + "itoa", "ryu", "serde", ] +[[package]] +name = "serde_spanned" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186" +dependencies = [ + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -1977,88 +2081,99 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.1", + "itoa", "ryu", "serde", ] [[package]] name = "serde_yaml" -version = "0.8.23" +version = "0.9.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" dependencies = [ - "indexmap", + "indexmap 2.0.2", + "itoa", "ryu", "serde", - "yaml-rust", + "unsafe-libyaml", ] [[package]] -name = "sha-1" -version = "0.8.2" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", + "cfg-if", + "cpufeatures", + "digest", ] [[package]] -name = "sha-1" -version = "0.9.8" +name = "sha2" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "block-buffer 0.9.0", "cfg-if", "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", + "digest", ] [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.5" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" [[package]] name = "socket2" -version = "0.4.2" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e" +dependencies = [ + "libc", + "windows-sys", +] + [[package]] name = "spin" version = "0.5.2" @@ -2067,9 +2182,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "static_assertions" @@ -2091,9 +2206,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "structopt" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b9788f4202aa75c240ecc9c15c65185e6a39ccdeb0fd5d008b98825464c87c" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ "clap", "lazy_static", @@ -2106,36 +2221,89 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", +] + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.38", ] [[package]] name = "syn" -version = "1.0.85" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] name = "tempfile" -version = "3.3.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ "cfg-if", "fastrand", - "libc", "redox_syscall", - "remove_dir_all", - "winapi", + "rustix", + "windows-sys", ] [[package]] @@ -2149,30 +2317,31 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" dependencies = [ + "cfg-if", "once_cell", ] @@ -2187,59 +2356,48 @@ dependencies = [ [[package]] name = "thrift" -version = "0.13.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6d965454947cc7266d22716ebfd07b18d84ebaf35eec558586bbb2a8cb6b5b" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" dependencies = [ "byteorder", "integer-encoding", "log", - "ordered-float 1.1.1", + "ordered-float 2.10.0", "threadpool", ] -[[package]] -name = "time" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" -dependencies = [ - "libc", - "wasi", - "winapi", -] - [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.15.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ + "backtrace", "bytes", "libc", - "memchr", "mio", "num_cpus", - "once_cell", "pin-project-lite", "signal-hook-registry", + "socket2 0.5.4", "tokio-macros", - "winapi", + "windows-sys", ] [[package]] @@ -2254,31 +2412,30 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] name = "tokio-stream" -version = "0.1.8" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" dependencies = [ "futures-core", "pin-project-lite", @@ -2287,22 +2444,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "511de3f85caf1c98983545490c3d09685fa8eb634e57eec22bb4db271f46cbd8" -dependencies = [ - "futures-util", - "log", - "pin-project", - "tokio", - "tungstenite 0.14.0", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.16.1" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e80b39df6afcc12cdf752398ade96a6b9e99c903dfdc36e53ad10b9c366bca72" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", @@ -2310,38 +2454,73 @@ dependencies = [ "rustls-native-certs", "tokio", "tokio-rustls", - "tungstenite 0.16.0", - "webpki", + "tungstenite", ] [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d" dependencies = [ "bytes", "futures-core", "futures-sink", - "log", "pin-project-lite", "tokio", + "tracing", ] [[package]] name = "toml" -version = "0.5.8" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.0.2", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.0.2", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "tower" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5651b5f6860a99bd1adb59dbfe1db8beb433e73709d9032b413a77e2fb7c066a" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", @@ -2356,18 +2535,19 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.2.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ee603d6e665ecc7e0f8d479eedb4626bd4726f0ee6119cee5b3a6bf184cac0" +checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "base64", - "bitflags", + "base64 0.21.4", + "bitflags 2.4.0", "bytes", "futures-core", "futures-util", "http", "http-body", "http-range-header", + "mime", "pin-project-lite", "tower-layer", "tower-service", @@ -2376,21 +2556,21 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.29" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "log", @@ -2401,29 +2581,30 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.18" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", ] [[package]] name = "tracing-core" -version = "0.1.21" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" dependencies = [ - "lazy_static", + "once_cell", + "valuable", ] [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -2432,13 +2613,13 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.6" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77be66445c4eeebb934a7340f227bfe7b338173d3f8c00a60a5a58005c9faecf" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ - "ansi_term", - "lazy_static", "matchers", + "nu-ansi-term", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -2450,112 +2631,89 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - -[[package]] -name = "tungstenite" -version = "0.14.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b2d8558abd2e276b0a8df5c05a2ec762609344191e5fd23e292c910e9165b5" -dependencies = [ - "base64", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand", - "sha-1 0.9.8", - "thiserror", - "url", - "utf-8", -] +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" [[package]] name = "tungstenite" -version = "0.16.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad3713a14ae247f22a728a0456a545df14acf3867f905adff84be99e23b3ad1" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64", "byteorder", "bytes", + "data-encoding", "http", "httparse", "log", "rand", "rustls", - "sha-1 0.9.8", + "sha1", "thiserror", "url", "utf-8", - "webpki", -] - -[[package]] -name = "twoway" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" -dependencies = [ - "memchr", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "ucd-trie" -version = "0.1.3" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "unsafe-libyaml" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" [[package]] name = "untrusted" @@ -2565,22 +2723,33 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" -version = "2.2.2" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "utf-8" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "vec_map" version = "0.8.2" @@ -2595,21 +2764,19 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "warp" -version = "0.3.2" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cef4e1e9114a4b7f1ac799f16ce71c14de5778500c5450ec6b7b920c55b587e" +checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169" dependencies = [ - "async-compression", "bytes", "futures-channel", "futures-util", @@ -2619,16 +2786,17 @@ dependencies = [ "log", "mime", "mime_guess", - "multipart", + "multer", "percent-encoding", "pin-project", + "rustls-pemfile", "scoped-tls", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-stream", - "tokio-tungstenite 0.15.0", + "tokio-tungstenite", "tokio-util", "tower-service", "tracing", @@ -2636,15 +2804,15 @@ dependencies = [ [[package]] name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.78" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2652,24 +2820,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.78" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", - "syn", + "syn 2.0.38", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.28" +version = "0.4.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" dependencies = [ "cfg-if", "js-sys", @@ -2679,9 +2847,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.78" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2689,51 +2857,38 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.78" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.78" +version = "0.2.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" [[package]] name = "web-sys" -version = "0.3.55" +version = "0.3.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" dependencies = [ "js-sys", "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki-roots" -version = "0.22.2" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552ceb903e957524388c4d3475725ff2c8b7960922063af6ce53c9a43da07449" -dependencies = [ - "webpki", -] +checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" [[package]] name = "winapi" @@ -2758,25 +2913,101 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "winreg" -version = "0.7.0" +name = "windows" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "winapi", + "windows-targets", ] [[package]] -name = "yaml-rust" -version = "0.4.5" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "linked-hash-map", + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winnow" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711d82167854aff2018dfd193aa0fef5370f456732f0d5a0c59b0f1b4b907" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys", ] [[package]] name = "zeroize" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc222aec311c323c717f56060324f32b82da1ce1dd81d9a09aa6a9030bfe08db" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" diff --git a/Cargo.toml b/Cargo.toml index 1bc1cc9..6b91e7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "graphgate" -version = "0.5.1" +version = "0.6.0" authors = ["Sunli "] -edition = "2018" +edition = "2021" description = "GraphGate is Apollo Federation implemented in Rust" license = "MIT/Apache-2.0" homepage = "https://github.com/async-graphql/graphgate" @@ -11,33 +11,31 @@ keywords = ["gateway", "graphql", "federation"] readme = "README.md" [dependencies] -graphgate-handler = { version = "0.5.0", path = "./crates/handler" } - -serde = { version = "1.0.133", features = ["derive"] } -anyhow = "1.0.52" -structopt = "0.3.25" -kube = { version = "0.66.0", features = ["derive", "client", "rustls-tls"], default-features = false } -k8s-openapi = { version = "0.13.1", features = ["v1_22"], default-features = false } -tokio = { version = "1.15.0", features = ["rt-multi-thread", "time", "macros", "sync", "signal"] } -warp = { version = "0.3.2", features = ["compression"] } -toml = "0.5.8" -futures-util = "0.3.19" +anyhow.workspace = true +futures-util.workspace = true +graphgate-handler.workspace = true +k8s-openapi = { version = "0.20.0", features = ["v1_28"], default-features = false } +kube = { version = "0.86.0", features = ["derive", "client", "rustls-tls"], default-features = false } +opentelemetry = { version = "0.20.0", features = ["rt-tokio", "metrics"] } +opentelemetry-jaeger = { version = "0.19.0", features = ["rt-tokio"] } +opentelemetry-prometheus = "0.13.0" +prometheus = "0.13.3" +serde.workspace = true +structopt = "0.3.26" +tokio = { version = "1.32.0", features = ["rt-multi-thread", "time", "macros", "sync", "signal"] } +toml = "0.8.2" tracing = "0.1.29" tracing-subscriber = { version = "0.3.6", features = ["env-filter"] } -opentelemetry = { version = "0.16.0", features = ["rt-tokio", "metrics"] } -opentelemetry-jaeger = { version = "0.15.0", features = ["rt-tokio"] } -opentelemetry-prometheus = "0.9.0" -prometheus = "0.12.0" +warp.workspace = true -[target.'cfg(all(target_env = "musl", target_pointer_width = "64"))'.dependencies.jemallocator] -version = "0.3.2" +[target.x86_64-unknown-linux-musl.dependencies.jemallocator] +version = "0.5.4" [dev-dependencies] -async-graphql = { version = "3.0.24", features = ["apollo_tracing"] } -async-graphql-warp = "3.0.24" -fastrand = "1.6.0" -async-stream = "0.3.2" -futures-util = "0.3.19" +async-graphql.workspace = true +async-graphql-warp.workspace = true +async-stream.workspace = true +fastrand = "2.0.1" [[example]] name = "builtin_scalar_bug" @@ -45,8 +43,34 @@ path = "./examples/builtin_scalar_bug/bug.rs" [workspace] members = [ - "crates/schema", - "crates/planner", - "crates/validation", - "crates/handler", + "crates/*" ] + +[workspace.dependencies] +anyhow = "1.0.75" +async-graphql = { version = "6", features = ["apollo_tracing"] } +async-graphql-warp = "6" +async-stream = "0.3.5" +async-trait = "0.1.73" +chrono = { version = "0.4.31", features = ["serde"] } +futures-util = { version = "0.3.28", features = ["sink"] } +globset = "0.4.13" +graphgate-handler = { version = "0.6.0", path = "crates/handler" } +graphgate-planner = { version = "0.6.0", path = "crates/planner" } +graphgate-schema = { version = "0.6.0", path = "crates/schema" } +graphgate-validation = { version = "0.6.0", path = "crates/validation" } +http = "0.2.6" +indexmap = { version = "2.0.2", features = ["serde"] } +once_cell = "1.18.0" +opentelemetry = { version = "0.20.0", features = ["metrics"] } +parser = { version = "6", package = "async-graphql-parser" } +reqwest = { version = "0.11.22", default-features = false, features = ["rustls-tls", "gzip", "brotli", "json"] } +serde = "1.0.188" +serde_json = "1.0.107" +thiserror = "1.0.49" +tokio = { version = "1.32.0", features = ["net", "sync", "macros", "time"] } +tokio-stream = "0.1.14" +tokio-tungstenite = { version = "0.20.1", features = ["rustls-tls-native-roots"] } +tracing = "0.1.29" +value = { version = "6", package = "async-graphql-value" } +warp = "0.3.6" \ No newline at end of file diff --git a/Dockerfile-examples b/Dockerfile-examples index 19de7c8..a234801 100644 --- a/Dockerfile-examples +++ b/Dockerfile-examples @@ -1,11 +1,11 @@ -FROM rust:1.50 as builder +FROM rust:1.70 as builder RUN apt-get update && apt-get install -y libssl-dev COPY . /tmp WORKDIR /tmp RUN cargo build --examples --release -FROM ubuntu:18.04 +FROM ubuntu:22.04 RUN apt-get update && apt-get install -y libssl-dev COPY --from=builder /tmp/target/release/examples/accounts /usr/bin/accounts COPY --from=builder /tmp/target/release/examples/products /usr/bin/products diff --git a/Dockerfile-standalone-demo b/Dockerfile-standalone-demo index 6948a44..a582fdc 100644 --- a/Dockerfile-standalone-demo +++ b/Dockerfile-standalone-demo @@ -1,12 +1,12 @@ -FROM rust:1.50 as builder +FROM rust:1.73 as builder RUN apt-get update && apt-get install -y libssl-dev COPY . /tmp WORKDIR /tmp RUN cargo build --bins --examples --release -FROM ubuntu:18.04 -RUN apt-get update && apt-get install -y libssl-dev +FROM ubuntu:22.04 +RUN apt update && apt install -y libssl-dev COPY --from=builder /tmp/target/release/graphgate /usr/bin/graphgate COPY --from=builder /tmp/target/release/examples/accounts /usr/bin/accounts COPY --from=builder /tmp/target/release/examples/products /usr/bin/products diff --git a/crates/handler/Cargo.toml b/crates/handler/Cargo.toml index 72e3b17..fc43fde 100644 --- a/crates/handler/Cargo.toml +++ b/crates/handler/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "graphgate-handler" -version = "0.5.1" +version = "0.6.0" authors = ["Sunli "] -edition = "2018" +edition = "2021" description = "GraphGate is Apollo Federation implemented in Rust" license = "MIT/Apache-2.0" homepage = "https://github.com/async-graphql/graphgate" @@ -10,25 +10,23 @@ repository = "https://github.com/async-graphql/graphgate" keywords = ["gateway", "graphql", "federation"] [dependencies] -graphgate-schema = { version = "0.5.0", path = "../schema" } -graphgate-planner = { version = "0.5.0", path = "../planner" } - -warp = "0.3.2" -indexmap = { version = "1.8.0", features = ["serde-1"] } -futures-util = { version = "0.3.19", features = ["sink"] } -parser = { version = "3.0.24", package = "async-graphql-parser" } -value = { version = "3.0.24", package = "async-graphql-value" } -once_cell = "1.9.0" -tokio = { version = "1.15.0", features = ["net", "sync", "macros", "time"] } -tokio-stream = "0.1.8" -tokio-tungstenite = { version = "0.16.1", features = ["rustls-tls-native-roots"] } -async-stream = "0.3.2" -tracing = "0.1.29" -anyhow = "1.0.52" -http = "0.2.6" -serde = "1.0.133" -serde_json = "1.0.75" -reqwest = { version = "0.11.9", default-features = false, features = ["rustls-tls", "gzip", "brotli", "json"] } -async-trait = "0.1.52" -opentelemetry = { version = "0.16.0", features = ["metrics"] } -chrono = { version = "0.4.19", features = ["serde"] } +anyhow.workspace = true +async-stream.workspace = true +async-trait.workspace = true +chrono.workspace = true +futures-util.workspace = true +graphgate-planner.workspace = true +graphgate-schema.workspace = true +http.workspace = true +indexmap.workspace = true +once_cell.workspace = true +opentelemetry.workspace = true +parser.workspace = true +reqwest.workspace = true +serde.workspace = true +serde_json.workspace = true +tokio-tungstenite.workspace = true +tokio.workspace = true +tracing.workspace = true +value.workspace = true +warp.workspace = true diff --git a/crates/handler/src/executor.rs b/crates/handler/src/executor.rs index 817af91..4f44677 100644 --- a/crates/handler/src/executor.rs +++ b/crates/handler/src/executor.rs @@ -1,26 +1,28 @@ use std::collections::HashMap; use chrono::{DateTime, Duration, Utc}; -use futures_util::future::BoxFuture; -use futures_util::stream::BoxStream; -use futures_util::StreamExt; +use futures_util::{future::BoxFuture, stream::BoxStream, StreamExt}; use graphgate_planner::{ - FetchNode, FlattenNode, IntrospectionNode, ParallelNode, PathSegment, PlanNode, ResponsePath, - RootNode, SequenceNode, SubscribeNode, + FetchNode, FlattenNode, IntrospectionNode, ParallelNode, PathSegment, PlanNode, Request, + Response, ResponsePath, RootNode, SequenceNode, ServerError, SubscribeNode, }; -use graphgate_planner::{Request, Response, ServerError}; use graphgate_schema::ComposedSchema; use indexmap::IndexMap; -use opentelemetry::trace::{FutureExt, TraceContextExt, Tracer}; -use opentelemetry::{global, Context}; +use opentelemetry::{ + global, + trace::{FutureExt, TraceContextExt, Tracer}, + Context, +}; use serde::{Deserialize, Deserializer}; use tokio::sync::{mpsc, Mutex}; use value::{ConstValue, Name, Variables}; -use crate::constants::*; -use crate::fetcher::{Fetcher, WebSocketFetcher}; -use crate::introspection::{IntrospectionRoot, Resolver}; -use crate::websocket::WebSocketController; +use crate::{ + constants::*, + fetcher::{Fetcher, WebSocketFetcher}, + introspection::{IntrospectionRoot, Resolver}, + websocket::WebSocketController, +}; /// Query plan executor pub struct Executor<'e> { @@ -519,12 +521,12 @@ fn rewrite_errors( path.extend(err.path.drain(1..)); } - for subpath in err.path.iter() { - match subpath { - ConstValue::String(x) => path.push(ConstValue::String(x.to_string())), - _ => {} - } - } + err.path + .iter() + .filter(|x| matches!(x, ConstValue::String(_))) + .for_each(|x| { + path.push(x.clone()); + }); target.push(ServerError { message: err.message, @@ -646,7 +648,7 @@ fn add_tracing_spans(response: &mut Response) { let parent_path = String::from(resolver.path.parent_path()); - let mut span_builder = tracer + let span_builder = tracer .span_builder(full_path.clone()) .with_start_time( tracing_result.start_time + Duration::nanoseconds(resolver.start_offset), @@ -658,13 +660,12 @@ fn add_tracing_spans(response: &mut Response) { ) .with_attributes(attributes); - if let Some(parent_cx) = resolvers.get(&parent_path) { - span_builder = span_builder.with_parent_context(parent_cx.clone()); - } + let span = if let Some(parent_cx) = resolvers.get(&parent_path) { + span_builder.start_with_context(&tracer, parent_cx) + } else { + span_builder.start(&tracer) + }; - resolvers.insert( - full_path, - Context::current_with_span(span_builder.start(&tracer)), - ); + resolvers.insert(full_path, Context::current_with_span(span)); } } diff --git a/crates/handler/src/fetcher.rs b/crates/handler/src/fetcher.rs index 307be8e..dad458b 100644 --- a/crates/handler/src/fetcher.rs +++ b/crates/handler/src/fetcher.rs @@ -5,8 +5,7 @@ use graphgate_planner::{Request, Response}; use http::HeaderMap; use tokio::sync::mpsc; -use crate::websocket::WebSocketController; -use crate::ServiceRouteTable; +use crate::{websocket::WebSocketController, ServiceRouteTable}; #[async_trait::async_trait] pub trait Fetcher: Send + Sync { diff --git a/crates/handler/src/handler.rs b/crates/handler/src/handler.rs index 4abbc03..3758d99 100644 --- a/crates/handler/src/handler.rs +++ b/crates/handler/src/handler.rs @@ -1,21 +1,21 @@ -use std::convert::{Infallible, TryInto}; -use std::net::SocketAddr; -use std::str::FromStr; -use std::sync::Arc; +use std::{ + convert::{Infallible, TryInto}, + net::SocketAddr, + str::FromStr, + sync::Arc, + time::Instant, +}; use graphgate_planner::Request; -use http::header::HeaderName; -use http::HeaderMap; -use opentelemetry::trace::{FutureExt, TraceContextExt, Tracer}; -use opentelemetry::{global, Context}; -use warp::http::Response as HttpResponse; -use warp::ws::Ws; -use warp::{Filter, Rejection, Reply}; +use http::{header::HeaderName, HeaderMap}; +use opentelemetry::{ + global, + trace::{FutureExt, TraceContextExt, Tracer}, + Context, +}; +use warp::{http::Response as HttpResponse, ws::Ws, Filter, Rejection, Reply}; -use crate::constants::*; -use crate::metrics::METRICS; -use crate::{websocket, SharedRouteTable}; -use std::time::Instant; +use crate::{constants::*, metrics::METRICS, websocket, SharedRouteTable}; #[derive(Clone)] pub struct HandlerConfig { @@ -80,8 +80,8 @@ pub fn graphql_request( METRICS .query_histogram - .record((Instant::now() - start_time).as_secs_f64()); - METRICS.query_counter.add(1); + .record((Instant::now() - start_time).as_secs_f64(), &[]); + METRICS.query_counter.add(1, &[]); Ok::<_, Infallible>(resp) } diff --git a/crates/handler/src/introspection/field.rs b/crates/handler/src/introspection/field.rs index 24d83b0..accee5e 100644 --- a/crates/handler/src/introspection/field.rs +++ b/crates/handler/src/introspection/field.rs @@ -2,9 +2,11 @@ use graphgate_planner::IntrospectionSelectionSet; use graphgate_schema::{ComposedSchema, MetaField}; use value::ConstValue; -use super::input_value::IntrospectionInputValue; -use super::r#type::IntrospectionType; -use super::resolver::{resolve_obj, Resolver}; +use super::{ + input_value::IntrospectionInputValue, + r#type::IntrospectionType, + resolver::{resolve_obj, Resolver}, +}; pub struct IntrospectionField<'a>(pub &'a MetaField); diff --git a/crates/handler/src/introspection/input_value.rs b/crates/handler/src/introspection/input_value.rs index 3efaf84..e86c0c2 100644 --- a/crates/handler/src/introspection/input_value.rs +++ b/crates/handler/src/introspection/input_value.rs @@ -2,8 +2,10 @@ use graphgate_planner::IntrospectionSelectionSet; use graphgate_schema::{ComposedSchema, MetaInputValue}; use value::ConstValue; -use super::r#type::IntrospectionType; -use super::resolver::{resolve_obj, Resolver}; +use super::{ + r#type::IntrospectionType, + resolver::{resolve_obj, Resolver}, +}; pub struct IntrospectionInputValue<'a>(pub &'a MetaInputValue); diff --git a/crates/handler/src/introspection/resolver.rs b/crates/handler/src/introspection/resolver.rs index 341432d..6f0f131 100644 --- a/crates/handler/src/introspection/resolver.rs +++ b/crates/handler/src/introspection/resolver.rs @@ -32,7 +32,7 @@ pub fn resolve_obj( fn is_skip(directives: &[IntrospectionDirective]) -> bool { for directive in directives { - let include = match &*directive.name.as_str() { + let include = match directive.name.as_str() { "skip" => false, "include" => true, _ => continue, diff --git a/crates/handler/src/introspection/root.rs b/crates/handler/src/introspection/root.rs index 3c8e21f..01a6139 100644 --- a/crates/handler/src/introspection/root.rs +++ b/crates/handler/src/introspection/root.rs @@ -2,9 +2,11 @@ use graphgate_planner::IntrospectionSelectionSet; use graphgate_schema::ComposedSchema; use value::ConstValue; -use super::r#type::IntrospectionType; -use super::resolver::{resolve_obj, Resolver}; -use super::schema::IntrospectionSchema; +use super::{ + r#type::IntrospectionType, + resolver::{resolve_obj, Resolver}, + schema::IntrospectionSchema, +}; pub struct IntrospectionRoot; diff --git a/crates/handler/src/introspection/schema.rs b/crates/handler/src/introspection/schema.rs index 61a4a85..e4b026a 100644 --- a/crates/handler/src/introspection/schema.rs +++ b/crates/handler/src/introspection/schema.rs @@ -2,8 +2,10 @@ use graphgate_planner::IntrospectionSelectionSet; use graphgate_schema::ComposedSchema; use value::ConstValue; -use super::r#type::IntrospectionType; -use super::resolver::{resolve_obj, Resolver}; +use super::{ + r#type::IntrospectionType, + resolver::{resolve_obj, Resolver}, +}; pub struct IntrospectionSchema; diff --git a/crates/handler/src/introspection/type.rs b/crates/handler/src/introspection/type.rs index 935d716..174a09d 100644 --- a/crates/handler/src/introspection/type.rs +++ b/crates/handler/src/introspection/type.rs @@ -4,10 +4,12 @@ use once_cell::sync::Lazy; use parser::types::{BaseType, Type}; use value::{ConstValue, Name}; -use super::enum_value::IntrospectionEnumValue; -use super::field::IntrospectionField; -use super::input_value::IntrospectionInputValue; -use super::resolver::{is_include_deprecated, resolve_obj, Resolver}; +use super::{ + enum_value::IntrospectionEnumValue, + field::IntrospectionField, + input_value::IntrospectionInputValue, + resolver::{is_include_deprecated, resolve_obj, Resolver}, +}; static SCALAR: Lazy = Lazy::new(|| Name::new("SCALAR")); static OBJECT: Lazy = Lazy::new(|| Name::new("OBJECT")); diff --git a/crates/handler/src/metrics.rs b/crates/handler/src/metrics.rs index 2e3e262..81988a0 100644 --- a/crates/handler/src/metrics.rs +++ b/crates/handler/src/metrics.rs @@ -1,10 +1,12 @@ use once_cell::sync::Lazy; -use opentelemetry::global; -use opentelemetry::metrics::{BoundCounter, BoundValueRecorder}; +use opentelemetry::{ + global, + metrics::{Counter, Histogram}, +}; pub struct Metrics { - pub query_counter: BoundCounter<'static, u64>, - pub query_histogram: BoundValueRecorder<'static, f64>, + pub query_counter: Counter, + pub query_histogram: Histogram, } pub static METRICS: Lazy = Lazy::new(|| { @@ -12,13 +14,11 @@ pub static METRICS: Lazy = Lazy::new(|| { let query_counter = meter .u64_counter("graphgate.queries_total") .with_description("Total number of GraphQL queries executed") - .init() - .bind(&[]); + .init(); let query_histogram = meter - .f64_value_recorder("graphgate.graphql_query_duration_seconds") + .f64_histogram("graphgate.graphql_query_duration_seconds") .with_description("The GraphQL query latencies in seconds.") - .init() - .bind(&[]); + .init(); Metrics { query_counter, query_histogram, diff --git a/crates/handler/src/service_route.rs b/crates/handler/src/service_route.rs index 628dccf..069f071 100644 --- a/crates/handler/src/service_route.rs +++ b/crates/handler/src/service_route.rs @@ -1,5 +1,7 @@ -use std::collections::HashMap; -use std::ops::{Deref, DerefMut}; +use std::{ + collections::HashMap, + ops::{Deref, DerefMut}, +}; use futures_util::TryFutureExt; use graphgate_planner::{Request, Response}; diff --git a/crates/handler/src/shared_route_table.rs b/crates/handler/src/shared_route_table.rs index 9d2f572..82f8cc9 100644 --- a/crates/handler/src/shared_route_table.rs +++ b/crates/handler/src/shared_route_table.rs @@ -4,17 +4,20 @@ use anyhow::{Context, Error, Result}; use graphgate_planner::{PlanBuilder, Request, Response, ServerError}; use graphgate_schema::ComposedSchema; use http::{header::HeaderName, HeaderValue}; -use opentelemetry::trace::{TraceContextExt, Tracer}; -use opentelemetry::{global, Context as OpenTelemetryContext}; +use opentelemetry::{ + global, + trace::{TraceContextExt, Tracer}, + Context as OpenTelemetryContext, +}; use serde::Deserialize; -use tokio::sync::{mpsc, RwLock}; -use tokio::time::{Duration, Instant}; +use tokio::{ + sync::{mpsc, RwLock}, + time::{Duration, Instant}, +}; use value::ConstValue; use warp::http::{HeaderMap, Response as HttpResponse, StatusCode}; -use crate::executor::Executor; -use crate::fetcher::HttpFetcher; -use crate::service_route::ServiceRouteTable; +use crate::{executor::Executor, fetcher::HttpFetcher, service_route::ServiceRouteTable}; enum Command { Change(ServiceRouteTable), @@ -185,7 +188,7 @@ impl SharedRouteTable { let executor = Executor::new(&composed_schema); let resp = opentelemetry::trace::FutureExt::with_context( - executor.execute_query(&HttpFetcher::new(&*route_table, &header_map), &plan), + executor.execute_query(&HttpFetcher::new(&route_table, &header_map), &plan), OpenTelemetryContext::current_with_span(tracer.span_builder("execute").start(&tracer)), ) .await; @@ -194,27 +197,23 @@ impl SharedRouteTable { let mut header_map = HeaderMap::new(); - match resp.headers.clone() { - Some(x) => { - for (k, v) in x - .into_iter() - .filter(|(k, _v)| self.receive_headers.contains(k)) - { - for val in v { - header_map.append( - HeaderName::from_bytes(k.as_bytes()).unwrap(), - HeaderValue::from_str(&val).unwrap(), - ); - } + if let Some(x) = resp.headers.clone() { + for (k, v) in x + .into_iter() + .filter(|(k, _v)| self.receive_headers.contains(k)) + { + for val in v { + header_map.append( + HeaderName::from_bytes(k.as_bytes()).unwrap(), + HeaderValue::from_str(&val).unwrap(), + ); } } - _ => {} } - match builder.headers_mut() { - Some(x) => x.extend(header_map), - None => {} - } + if let Some(x) = builder.headers_mut() { + x.extend(header_map) + }; builder.body(serde_json::to_string(&resp).unwrap()).unwrap() } diff --git a/crates/handler/src/websocket/controller.rs b/crates/handler/src/websocket/controller.rs index bcc9305..c1b5b4a 100644 --- a/crates/handler/src/websocket/controller.rs +++ b/crates/handler/src/websocket/controller.rs @@ -1,21 +1,30 @@ -use std::collections::{HashMap, HashSet}; -use std::str::FromStr; -use std::sync::Arc; +use std::{ + collections::{HashMap, HashSet}, + str::FromStr, + sync::Arc, +}; use anyhow::Result; -use futures_util::stream::{SplitSink, SplitStream}; -use futures_util::{SinkExt, StreamExt}; +use futures_util::{ + stream::{SplitSink, SplitStream}, + SinkExt, StreamExt, +}; use graphgate_planner::{Request, Response}; use http::{HeaderMap, Request as HttpRequest}; -use tokio::net::TcpStream; -use tokio::sync::{mpsc, oneshot}; -use tokio::time::Duration; -use tokio_tungstenite::tungstenite::protocol::CloseFrame; -use tokio_tungstenite::tungstenite::{Message, Result as WsResult}; -use tokio_tungstenite::{MaybeTlsStream, WebSocketStream}; +use tokio::{ + net::TcpStream, + sync::{mpsc, oneshot}, + time::Duration, +}; +use tokio_tungstenite::{ + tungstenite::{protocol::CloseFrame, Message, Result as WsResult}, + MaybeTlsStream, WebSocketStream, +}; -use super::grouped_stream::{GroupedStream, StreamEvent}; -use super::protocol::{ClientMessage, Protocols, ServerMessage}; +use super::{ + grouped_stream::{GroupedStream, StreamEvent}, + protocol::{ClientMessage, Protocols, ServerMessage}, +}; use crate::ServiceRouteTable; const CONNECT_TIMEOUT_SECONDS: u64 = 5; @@ -173,8 +182,7 @@ impl WebSocketContext { .headers() .get("Sec-WebSocket-Protocol") .and_then(|value| value.to_str().ok()) - .map(|value| Protocols::from_str(value).ok()) - .flatten() + .and_then(|value| Protocols::from_str(value).ok()) .ok_or_else(|| anyhow::anyhow!("Unknown protocol: {}", url))?; stream diff --git a/crates/handler/src/websocket/grouped_stream.rs b/crates/handler/src/websocket/grouped_stream.rs index a03516e..5c1bd1f 100644 --- a/crates/handler/src/websocket/grouped_stream.rs +++ b/crates/handler/src/websocket/grouped_stream.rs @@ -1,12 +1,12 @@ -use std::borrow::Borrow; -use std::collections::HashMap; -use std::hash::Hash; -use std::pin::Pin; -use std::task::{Context, Poll}; +use std::{ + borrow::Borrow, + collections::HashMap, + hash::Hash, + pin::Pin, + task::{Context, Poll}, +}; -use futures_util::stream::Stream; -use futures_util::task::AtomicWaker; -use futures_util::StreamExt; +use futures_util::{stream::Stream, task::AtomicWaker, StreamExt}; pub struct GroupedStream { streams: HashMap, diff --git a/crates/handler/src/websocket/server.rs b/crates/handler/src/websocket/server.rs index 4646eec..9f44de1 100644 --- a/crates/handler/src/websocket/server.rs +++ b/crates/handler/src/websocket/server.rs @@ -1,20 +1,17 @@ use std::sync::Arc; -use futures_util::sink::Sink; -use futures_util::stream::Stream; -use futures_util::{SinkExt, StreamExt}; +use futures_util::{sink::Sink, stream::Stream, SinkExt, StreamExt}; use graphgate_planner::{PlanBuilder, Response, ServerError}; use graphgate_schema::ComposedSchema; use value::ConstValue; -use warp::http::HeaderMap; -use warp::ws::Message; -use warp::Error; +use warp::{http::HeaderMap, ws::Message, Error}; -use super::controller::WebSocketController; -use super::grouped_stream::{GroupedStream, StreamEvent}; -use super::protocol::{ClientMessage, ConnectionError, Protocols, ServerMessage}; -use crate::executor::Executor; -use crate::ServiceRouteTable; +use super::{ + controller::WebSocketController, + grouped_stream::{GroupedStream, StreamEvent}, + protocol::{ClientMessage, ConnectionError, Protocols, ServerMessage}, +}; +use crate::{executor::Executor, ServiceRouteTable}; pub async fn server( schema: Arc, diff --git a/crates/planner/Cargo.toml b/crates/planner/Cargo.toml index 7f69770..52d2f74 100644 --- a/crates/planner/Cargo.toml +++ b/crates/planner/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "graphgate-planner" -version = "0.5.1" +version = "0.6.0" authors = ["Sunli "] -edition = "2018" +edition = "2021" description = "GraphGate is Apollo Federation implemented in Rust" license = "MIT/Apache-2.0" homepage = "https://github.com/async-graphql/graphgate" @@ -10,14 +10,13 @@ repository = "https://github.com/async-graphql/graphgate" keywords = ["gateway", "graphql", "federation"] [dependencies] -graphgate-schema = { version = "0.5.0", path = "../schema" } -graphgate-validation = { version = "0.5.0", path = "../validation" } - -parser = { version = "3.0.24", package = "async-graphql-parser" } -value = { version = "3.0.24", package = "async-graphql-value" } -indexmap = { version = "1.8.0", features = ["serde-1"] } -serde = "1.0.133" +graphgate-schema.workspace = true +graphgate-validation.workspace = true +indexmap.workspace = true +parser.workspace = true +serde.workspace = true +value.workspace = true [dev-dependencies] -globset = "0.4.8" -serde_json = "1.0.75" +globset.workspace = true +serde_json.workspace = true diff --git a/crates/planner/src/builder.rs b/crates/planner/src/builder.rs index 2a4fa97..e1a9315 100644 --- a/crates/planner/src/builder.rs +++ b/crates/planner/src/builder.rs @@ -4,23 +4,27 @@ use std::collections::HashMap; use graphgate_schema::{ComposedSchema, KeyFields, MetaField, MetaType, TypeKind, ValueExt}; use indexmap::IndexMap; -use parser::types::{ - BaseType, DocumentOperations, ExecutableDocument, Field, FragmentDefinition, - OperationDefinition, OperationType, Selection, SelectionSet, Type, VariableDefinition, +use parser::{ + types::{ + BaseType, DocumentOperations, ExecutableDocument, Field, FragmentDefinition, + OperationDefinition, OperationType, Selection, SelectionSet, Type, VariableDefinition, + }, + Positioned, }; -use parser::Positioned; use value::{ConstValue, Name, Value, Variables}; -use crate::plan::{ - FetchNode, FlattenNode, IntrospectionDirective, IntrospectionField, IntrospectionNode, - IntrospectionSelectionSet, ParallelNode, PathSegment, PlanNode, ResponsePath, SequenceNode, +use crate::{ + plan::{ + FetchNode, FlattenNode, IntrospectionDirective, IntrospectionField, IntrospectionNode, + IntrospectionSelectionSet, ParallelNode, PathSegment, PlanNode, ResponsePath, SequenceNode, + }, + types::{ + FetchEntity, FetchEntityGroup, FetchEntityKey, FetchQuery, FieldRef, MutationRootGroup, + QueryRootGroup, RequiredRef, RootGroup, SelectionRef, SelectionRefSet, + VariableDefinitionsRef, VariablesRef, + }, + Response, RootNode, ServerError, SubscribeNode, }; -use crate::types::{ - FetchEntity, FetchEntityGroup, FetchEntityKey, FetchQuery, FieldRef, MutationRootGroup, - QueryRootGroup, RequiredRef, RootGroup, SelectionRef, SelectionRefSet, VariableDefinitionsRef, - VariablesRef, -}; -use crate::{Response, RootNode, ServerError, SubscribeNode}; #[derive(Debug)] struct Context<'a> { @@ -529,7 +533,7 @@ impl<'a> Context<'a> { let service = match field_definition .service .as_deref() - .or_else(|| parent_type.owner.as_deref()) + .or(parent_type.owner.as_deref()) { Some(service) => service, None => current_service, @@ -553,7 +557,7 @@ impl<'a> Context<'a> { fetch_entity_group, parent_type, field, - &field_definition, + field_definition, service, keys, ); @@ -574,7 +578,7 @@ impl<'a> Context<'a> { &mut sub_selection_set, fetch_entity_group, current_service, - &field_type, + field_type, &field.selection_set.node, ); } else { @@ -615,6 +619,15 @@ impl<'a> Context<'a> { match fetch_entity_group.get_mut(&fetch_entity_key) { Some(fetch_entity) => { fetch_entity.fields.push(field); + if meta_field.requires.is_some() { + selection_ref_set + .0 + .push(SelectionRef::RequiredRef(RequiredRef { + prefix: self.key_id - 1, + fields: keys, + requires: meta_field.requires.as_ref(), + })); + } } None => { let prefix = self.take_key_prefix(); diff --git a/crates/planner/src/plan.rs b/crates/planner/src/plan.rs index 7d4d907..932e030 100644 --- a/crates/planner/src/plan.rs +++ b/crates/planner/src/plan.rs @@ -1,12 +1,16 @@ -use std::fmt::{Debug, Display, Formatter, Result as FmtResult}; -use std::ops::{Deref, DerefMut}; +use std::{ + fmt::{Debug, Display, Formatter, Result as FmtResult}, + ops::{Deref, DerefMut}, +}; use indexmap::IndexMap; use serde::{Serialize, Serializer}; use value::{ConstValue, Name, Variables}; -use crate::types::{FetchQuery, VariablesRef}; -use crate::Request; +use crate::{ + types::{FetchQuery, VariablesRef}, + Request, +}; #[derive(Debug, Serialize)] #[serde(tag = "type", rename_all = "lowercase")] diff --git a/crates/planner/src/types.rs b/crates/planner/src/types.rs index 7b2b776..6a5b072 100644 --- a/crates/planner/src/types.rs +++ b/crates/planner/src/types.rs @@ -2,10 +2,14 @@ use std::fmt::{Display, Formatter, Result as FmtResult}; use graphgate_schema::{KeyFields, MetaType}; use indexmap::IndexMap; -use parser::types::{Directive, Field, OperationType, VariableDefinition}; -use parser::Positioned; -use serde::ser::{SerializeSeq, SerializeStruct}; -use serde::{Serialize, Serializer}; +use parser::{ + types::{Directive, Field, OperationType, VariableDefinition}, + Positioned, +}; +use serde::{ + ser::{SerializeSeq, SerializeStruct}, + Serialize, Serializer, +}; use value::{ConstValue, Name, Value, Variables}; use crate::plan::ResponsePath; @@ -138,7 +142,7 @@ fn stringify_key_fields(f: &mut Formatter<'_>, prefix: usize, fields: &KeyFields for (field_name, children) in fields.iter() { write!(f, " __key{}_{}:{}", prefix, field_name, field_name)?; - stringify_key_fields_no_prefix(f, &children)?; + stringify_key_fields_no_prefix(f, children)?; } Ok(()) } @@ -176,9 +180,9 @@ fn stringify_selection_ref_set_rec( } SelectionRef::RequiredRef(require_ref) => { write!(f, "__key{}___typename:__typename", require_ref.prefix,)?; - stringify_key_fields(f, require_ref.prefix, &require_ref.fields)?; + stringify_key_fields(f, require_ref.prefix, require_ref.fields)?; if let Some(requires) = require_ref.requires { - stringify_key_fields(f, require_ref.prefix, &requires)?; + stringify_key_fields(f, require_ref.prefix, requires)?; } } SelectionRef::InlineFragment { @@ -289,7 +293,7 @@ impl<'a> Serialize for VariableDefinitionsRef<'a> { let mut s = serializer.serialize_seq(None)?; for item in &self.variables { - s.serialize_element(&VariableDefinitionRef(*item))?; + s.serialize_element(&VariableDefinitionRef(item))?; } s.end() } diff --git a/crates/schema/Cargo.toml b/crates/schema/Cargo.toml index 2dc06e3..280a0a4 100644 --- a/crates/schema/Cargo.toml +++ b/crates/schema/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "graphgate-schema" -version = "0.5.1" +version = "0.6.0" authors = ["Sunli "] -edition = "2018" +edition = "2021" description = "GraphGate is Apollo Federation implemented in Rust" license = "MIT/Apache-2.0" homepage = "https://github.com/async-graphql/graphgate" @@ -10,7 +10,7 @@ repository = "https://github.com/async-graphql/graphgate" keywords = ["gateway", "graphql", "federation"] [dependencies] -parser = { version = "3.0.24", package = "async-graphql-parser" } -value = { version = "3.0.24", package = "async-graphql-value" } -thiserror = "1.0.30" -indexmap = { version = "1.8.0", features = ["serde-1"] } +indexmap.workspace = true +parser.workspace = true +thiserror.workspace = true +value.workspace = true diff --git a/crates/schema/src/composed_schema.rs b/crates/schema/src/composed_schema.rs index 35f95a6..60182f8 100644 --- a/crates/schema/src/composed_schema.rs +++ b/crates/schema/src/composed_schema.rs @@ -1,17 +1,17 @@ -use std::collections::HashMap; -use std::ops::Deref; +use std::{collections::HashMap, ops::Deref}; use indexmap::{IndexMap, IndexSet}; -use parser::types::{ - self, BaseType, ConstDirective, DirectiveDefinition, DirectiveLocation, DocumentOperations, - EnumType, InputObjectType, InterfaceType, ObjectType, SchemaDefinition, Selection, - SelectionSet, ServiceDocument, Type, TypeDefinition, TypeSystemDefinition, UnionType, +use parser::{ + types::{ + self, BaseType, ConstDirective, DirectiveDefinition, DirectiveLocation, DocumentOperations, + EnumType, InputObjectType, InterfaceType, ObjectType, SchemaDefinition, Selection, + SelectionSet, ServiceDocument, Type, TypeDefinition, TypeSystemDefinition, UnionType, + }, + Positioned, Result, }; -use parser::{Positioned, Result}; use value::{ConstValue, Name}; -use crate::type_ext::TypeExt; -use crate::CombineError; +use crate::{type_ext::TypeExt, CombineError}; #[derive(Debug, Eq, PartialEq)] pub enum Deprecation { @@ -68,6 +68,21 @@ impl Deref for KeyFields { } } +#[derive(Debug, PartialEq, PartialOrd)] +pub struct FederationVersion(f32); + +impl Default for FederationVersion { + fn default() -> Self { + Self(1.0) + } +} + +impl From for FederationVersion { + fn from(version: f32) -> Self { + Self(version) + } +} + #[derive(Debug, Eq, PartialEq)] pub struct MetaEnumValue { pub description: Option, @@ -171,6 +186,7 @@ pub struct ComposedSchema { pub subscription_type: Option, pub types: IndexMap, pub directives: HashMap, + pub federation_version: FederationVersion, } impl ComposedSchema { @@ -322,8 +338,40 @@ impl ComposedSchema { .insert(meta_type.name.clone(), meta_type); } } - TypeSystemDefinition::Schema(_schema_definition) => { - return Err(CombineError::SchemaIsNotAllowed) + TypeSystemDefinition::Schema(schema_definition) => { + if schema_definition.node.extend { + let path = "/federation/v"; + let federation_link: Vec = schema_definition + .node + .directives + .iter() + .filter_map(|d| { + if d.node.name.node.as_str() == "link" + && get_argument_str(&d.node.arguments, "url") + .map(|key| key.node.to_string()) + .unwrap_or_default() + .contains(path) + { + get_argument_str(&d.node.arguments, "url") + .map(|key| key.node.to_ascii_lowercase()) + } else { + None + } + }) + .collect(); + if federation_link.len() == 1 { + if let Some(version) = federation_link[0].rsplit_once(path) { + if let Ok(version) = version.1.parse::() { + if version > composed_schema.federation_version.0 { + composed_schema.federation_version = version.into(); + } + } + } + } + } + if composed_schema.federation_version == FederationVersion::default() { + return Err(CombineError::SchemaIsNotAllowed); + } } TypeSystemDefinition::Directive(_directive_definition) => {} } diff --git a/crates/validation/Cargo.toml b/crates/validation/Cargo.toml index c4cdbe9..a7cafbb 100644 --- a/crates/validation/Cargo.toml +++ b/crates/validation/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "graphgate-validation" -version = "0.5.0" +version = "0.6.0" authors = ["Sunli "] -edition = "2018" +edition = "2021" description = "GraphGate is Apollo Federation implemented in Rust" license = "MIT/Apache-2.0" homepage = "https://github.com/async-graphql/graphgate" @@ -10,11 +10,10 @@ repository = "https://github.com/async-graphql/graphgate" keywords = ["gateway", "graphql", "federation"] [dependencies] -graphgate-schema = { version = "0.5.0", path = "../schema" } - -parser = { version = "3.0.24", package = "async-graphql-parser" } -value = { version = "3.0.24", package = "async-graphql-value" } -indexmap = { version = "1.8.0", features = ["serde-1"] } +graphgate-schema.workspace = true +indexmap.workspace = true +parser.workspace = true +value.workspace = true [dev-dependencies] -once_cell = "1.9.0" +once_cell.workspace = true diff --git a/crates/validation/src/lib.rs b/crates/validation/src/lib.rs index 5b76ae3..cbc62d6 100644 --- a/crates/validation/src/lib.rs +++ b/crates/validation/src/lib.rs @@ -10,14 +10,12 @@ mod suggestion; mod utils; mod visitor; +pub use error::RuleError; use graphgate_schema::ComposedSchema; use parser::types::ExecutableDocument; use value::Variables; - use visitor::{visit, Visitor, VisitorContext, VisitorNil}; -pub use error::RuleError; - macro_rules! rules { ($($rule:ident),*) => { VisitorNil$(.with(rules::$rule::default()))* @@ -52,6 +50,6 @@ pub fn check_rules( VariablesAreInputTypes, VariableInAllowedPosition ); - visit(&mut visitor, &mut ctx, &document); + visit(&mut visitor, &mut ctx, document); ctx.errors } diff --git a/crates/validation/src/rules/arguments_of_correct_type.rs b/crates/validation/src/rules/arguments_of_correct_type.rs index f0cb427..6080e86 100644 --- a/crates/validation/src/rules/arguments_of_correct_type.rs +++ b/crates/validation/src/rules/arguments_of_correct_type.rs @@ -1,11 +1,15 @@ use graphgate_schema::MetaInputValue; use indexmap::IndexMap; -use parser::types::{Directive, Field}; -use parser::Positioned; +use parser::{ + types::{Directive, Field}, + Positioned, +}; use value::{Name, Value}; -use crate::utils::{is_valid_input_value, PathNode}; -use crate::{Visitor, VisitorContext}; +use crate::{ + utils::{is_valid_input_value, PathNode}, + Visitor, VisitorContext, +}; #[derive(Default)] pub struct ArgumentsOfCorrectType<'a> { diff --git a/crates/validation/src/rules/default_values_of_correct_type.rs b/crates/validation/src/rules/default_values_of_correct_type.rs index 6ed4652..6117a66 100644 --- a/crates/validation/src/rules/default_values_of_correct_type.rs +++ b/crates/validation/src/rules/default_values_of_correct_type.rs @@ -1,8 +1,9 @@ -use parser::types::VariableDefinition; -use parser::Positioned; +use parser::{types::VariableDefinition, Positioned}; -use crate::utils::{is_valid_input_value, PathNode}; -use crate::{Visitor, VisitorContext}; +use crate::{ + utils::{is_valid_input_value, PathNode}, + Visitor, VisitorContext, +}; #[derive(Default)] pub struct DefaultValuesOfCorrectType; diff --git a/crates/validation/src/rules/fields_on_correct_type.rs b/crates/validation/src/rules/fields_on_correct_type.rs index 2d16ca5..dc23db9 100644 --- a/crates/validation/src/rules/fields_on_correct_type.rs +++ b/crates/validation/src/rules/fields_on_correct_type.rs @@ -1,10 +1,7 @@ -use parser::types::Field; -use parser::Positioned; - use graphgate_schema::TypeKind; +use parser::{types::Field, Positioned}; -use crate::suggestion::make_suggestion; -use crate::{Visitor, VisitorContext}; +use crate::{suggestion::make_suggestion, Visitor, VisitorContext}; #[derive(Default)] pub struct FieldsOnCorrectType; diff --git a/crates/validation/src/rules/fragments_on_composite_types.rs b/crates/validation/src/rules/fragments_on_composite_types.rs index 7f790c2..b93900e 100644 --- a/crates/validation/src/rules/fragments_on_composite_types.rs +++ b/crates/validation/src/rules/fragments_on_composite_types.rs @@ -1,5 +1,7 @@ -use parser::types::{FragmentDefinition, InlineFragment}; -use parser::Positioned; +use parser::{ + types::{FragmentDefinition, InlineFragment}, + Positioned, +}; use value::Name; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/known_argument_names.rs b/crates/validation/src/rules/known_argument_names.rs index afc1dc3..5ad8323 100644 --- a/crates/validation/src/rules/known_argument_names.rs +++ b/crates/validation/src/rules/known_argument_names.rs @@ -1,11 +1,12 @@ use graphgate_schema::MetaInputValue; use indexmap::IndexMap; -use parser::types::{Directive, Field}; -use parser::Positioned; +use parser::{ + types::{Directive, Field}, + Positioned, +}; use value::{Name, Value}; -use crate::suggestion::make_suggestion; -use crate::{Visitor, VisitorContext}; +use crate::{suggestion::make_suggestion, Visitor, VisitorContext}; enum ArgsType<'a> { Directive(&'a str), @@ -26,8 +27,7 @@ impl<'a> KnownArgumentNames<'a> { " Did you mean", self.current_args .iter() - .map(|(args, _)| args.iter().map(|arg| arg.0.as_str())) - .flatten(), + .flat_map(|(args, _)| args.iter().map(|arg| arg.0.as_str())), name, ) .unwrap_or_default() diff --git a/crates/validation/src/rules/known_directives.rs b/crates/validation/src/rules/known_directives.rs index 3ca64cf..6251d58 100644 --- a/crates/validation/src/rules/known_directives.rs +++ b/crates/validation/src/rules/known_directives.rs @@ -1,8 +1,10 @@ -use parser::types::{ - Directive, DirectiveLocation, Field, FragmentDefinition, FragmentSpread, InlineFragment, - OperationDefinition, OperationType, +use parser::{ + types::{ + Directive, DirectiveLocation, Field, FragmentDefinition, FragmentSpread, InlineFragment, + OperationDefinition, OperationType, + }, + Positioned, }; -use parser::Positioned; use value::Name; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/known_fragment_names.rs b/crates/validation/src/rules/known_fragment_names.rs index dc969bc..32c4ab6 100644 --- a/crates/validation/src/rules/known_fragment_names.rs +++ b/crates/validation/src/rules/known_fragment_names.rs @@ -1,5 +1,4 @@ -use parser::types::FragmentSpread; -use parser::Positioned; +use parser::{types::FragmentSpread, Positioned}; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/known_type_names.rs b/crates/validation/src/rules/known_type_names.rs index e6bf610..0ae399e 100644 --- a/crates/validation/src/rules/known_type_names.rs +++ b/crates/validation/src/rules/known_type_names.rs @@ -1,6 +1,8 @@ use graphgate_schema::TypeExt; -use parser::types::{FragmentDefinition, InlineFragment, TypeCondition, VariableDefinition}; -use parser::{Pos, Positioned}; +use parser::{ + types::{FragmentDefinition, InlineFragment, TypeCondition, VariableDefinition}, + Pos, Positioned, +}; use value::Name; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/no_fragment_cycles.rs b/crates/validation/src/rules/no_fragment_cycles.rs index 0bf1cde..d305fd8 100644 --- a/crates/validation/src/rules/no_fragment_cycles.rs +++ b/crates/validation/src/rules/no_fragment_cycles.rs @@ -1,7 +1,9 @@ use std::collections::{HashMap, HashSet}; -use parser::types::{ExecutableDocument, FragmentDefinition, FragmentSpread}; -use parser::{Pos, Positioned}; +use parser::{ + types::{ExecutableDocument, FragmentDefinition, FragmentSpread}, + Pos, Positioned, +}; use value::Name; use crate::{RuleError, Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/no_undefined_variables.rs b/crates/validation/src/rules/no_undefined_variables.rs index d34be36..8ad6219 100644 --- a/crates/validation/src/rules/no_undefined_variables.rs +++ b/crates/validation/src/rules/no_undefined_variables.rs @@ -1,14 +1,16 @@ use std::collections::{HashMap, HashSet}; use graphgate_schema::ValueExt; -use parser::types::{ - ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, VariableDefinition, +use parser::{ + types::{ + ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, + VariableDefinition, + }, + Pos, Positioned, }; -use parser::{Pos, Positioned}; use value::{Name, Value}; -use crate::utils::Scope; -use crate::{Visitor, VisitorContext}; +use crate::{utils::Scope, Visitor, VisitorContext}; #[derive(Default)] pub struct NoUndefinedVariables<'a> { @@ -50,7 +52,7 @@ impl<'a> NoUndefinedVariables<'a> { impl<'a> Visitor<'a> for NoUndefinedVariables<'a> { fn exit_document(&mut self, ctx: &mut VisitorContext<'a>, _doc: &'a ExecutableDocument) { - for (op_name, &(ref def_pos, ref def_vars)) in &self.defined_variables { + for (op_name, (def_pos, def_vars)) in &self.defined_variables { let mut unused = Vec::new(); let mut visited = HashSet::new(); self.find_undef_vars( diff --git a/crates/validation/src/rules/no_unused_fragments.rs b/crates/validation/src/rules/no_unused_fragments.rs index 94bb8b1..98e1385 100644 --- a/crates/validation/src/rules/no_unused_fragments.rs +++ b/crates/validation/src/rules/no_unused_fragments.rs @@ -1,11 +1,12 @@ use std::collections::{HashMap, HashSet}; -use parser::types::{ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition}; -use parser::{Pos, Positioned}; +use parser::{ + types::{ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition}, + Pos, Positioned, +}; use value::Name; -use crate::utils::Scope; -use crate::{Visitor, VisitorContext}; +use crate::{utils::Scope, Visitor, VisitorContext}; #[derive(Default)] pub struct NoUnusedFragments<'a> { diff --git a/crates/validation/src/rules/no_unused_variables.rs b/crates/validation/src/rules/no_unused_variables.rs index 5533a23..c32f6f1 100644 --- a/crates/validation/src/rules/no_unused_variables.rs +++ b/crates/validation/src/rules/no_unused_variables.rs @@ -1,14 +1,16 @@ use std::collections::{HashMap, HashSet}; use graphgate_schema::ValueExt; -use parser::types::{ - ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, VariableDefinition, +use parser::{ + types::{ + ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, + VariableDefinition, + }, + Pos, Positioned, }; -use parser::{Pos, Positioned}; use value::{Name, Value}; -use crate::utils::Scope; -use crate::{Visitor, VisitorContext}; +use crate::{utils::Scope, Visitor, VisitorContext}; #[derive(Default)] pub struct NoUnusedVariables<'a> { diff --git a/crates/validation/src/rules/overlapping_fields_can_be_merged.rs b/crates/validation/src/rules/overlapping_fields_can_be_merged.rs index 2f13b84..9182442 100644 --- a/crates/validation/src/rules/overlapping_fields_can_be_merged.rs +++ b/crates/validation/src/rules/overlapping_fields_can_be_merged.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; -use parser::types::{Field, Selection, SelectionSet}; -use parser::Positioned; +use parser::{ + types::{Field, Selection, SelectionSet}, + Positioned, +}; use crate::{Visitor, VisitorContext}; @@ -38,7 +40,7 @@ impl<'a, 'ctx> FindConflicts<'a, 'ctx> { .as_ref() .map(|name| &name.node) .unwrap_or_else(|| &field.node.name.node); - self.add_output(&output_name, field); + self.add_output(output_name, field); } Selection::InlineFragment(inline_fragment) => { self.find(&inline_fragment.node.selection_set); diff --git a/crates/validation/src/rules/possible_fragment_spreads.rs b/crates/validation/src/rules/possible_fragment_spreads.rs index a467442..8b6c144 100644 --- a/crates/validation/src/rules/possible_fragment_spreads.rs +++ b/crates/validation/src/rules/possible_fragment_spreads.rs @@ -1,7 +1,9 @@ use std::collections::HashMap; -use parser::types::{ExecutableDocument, FragmentSpread, InlineFragment, TypeCondition}; -use parser::Positioned; +use parser::{ + types::{ExecutableDocument, FragmentSpread, InlineFragment, TypeCondition}, + Positioned, +}; use crate::{Visitor, VisitorContext}; @@ -56,7 +58,7 @@ impl<'a> Visitor<'a> for PossibleFragmentSpreads<'a> { .map(|c| &c.node) { if let Some(on_type) = ctx.schema.types.get(fragment_type.node.as_str()) { - if !parent_type.type_overlap(&on_type) { + if !parent_type.type_overlap(on_type) { ctx.report_error( vec![inline_fragment.pos], format!( diff --git a/crates/validation/src/rules/provided_non_null_arguments.rs b/crates/validation/src/rules/provided_non_null_arguments.rs index e5450ff..a1b5897 100644 --- a/crates/validation/src/rules/provided_non_null_arguments.rs +++ b/crates/validation/src/rules/provided_non_null_arguments.rs @@ -1,5 +1,7 @@ -use parser::types::{Directive, Field}; -use parser::Positioned; +use parser::{ + types::{Directive, Field}, + Positioned, +}; use crate::{Visitor, VisitorContext}; @@ -17,12 +19,11 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { for arg in schema_directive.arguments.values() { if !arg.ty.nullable && arg.default_value.is_none() - && directive + && !directive .node .arguments .iter() - .find(|(name, _)| name.node == arg.name) - .is_none() + .any(|(name, _)| name.node == arg.name) { ctx.report_error(vec![directive.pos], format!( @@ -40,12 +41,11 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { for arg in schema_field.arguments.values() { if !arg.ty.nullable && arg.default_value.is_none() - && field + && !field .node .arguments .iter() - .find(|(name, _)| name.node == arg.name) - .is_none() + .any(|(name, _)| name.node == arg.name) { ctx.report_error(vec![field.pos], format!( diff --git a/crates/validation/src/rules/scalar_leafs.rs b/crates/validation/src/rules/scalar_leafs.rs index 1547c61..5ae3da9 100644 --- a/crates/validation/src/rules/scalar_leafs.rs +++ b/crates/validation/src/rules/scalar_leafs.rs @@ -1,5 +1,4 @@ -use parser::types::Field; -use parser::Positioned; +use parser::{types::Field, Positioned}; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/unique_argument_names.rs b/crates/validation/src/rules/unique_argument_names.rs index 62e3afc..485a0aa 100644 --- a/crates/validation/src/rules/unique_argument_names.rs +++ b/crates/validation/src/rules/unique_argument_names.rs @@ -1,7 +1,9 @@ use std::collections::HashSet; -use parser::types::{Directive, Field}; -use parser::Positioned; +use parser::{ + types::{Directive, Field}, + Positioned, +}; use value::{Name, Value}; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/unique_variable_names.rs b/crates/validation/src/rules/unique_variable_names.rs index 192fbd3..630d8f9 100644 --- a/crates/validation/src/rules/unique_variable_names.rs +++ b/crates/validation/src/rules/unique_variable_names.rs @@ -1,7 +1,9 @@ use std::collections::HashSet; -use parser::types::{OperationDefinition, VariableDefinition}; -use parser::Positioned; +use parser::{ + types::{OperationDefinition, VariableDefinition}, + Positioned, +}; use value::Name; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/variables_are_input_types.rs b/crates/validation/src/rules/variables_are_input_types.rs index bcee2e9..b4b00e5 100644 --- a/crates/validation/src/rules/variables_are_input_types.rs +++ b/crates/validation/src/rules/variables_are_input_types.rs @@ -1,5 +1,4 @@ -use parser::types::VariableDefinition; -use parser::Positioned; +use parser::{types::VariableDefinition, Positioned}; use crate::{Visitor, VisitorContext}; diff --git a/crates/validation/src/rules/variables_in_allowed_position.rs b/crates/validation/src/rules/variables_in_allowed_position.rs index 64b2d28..737017d 100644 --- a/crates/validation/src/rules/variables_in_allowed_position.rs +++ b/crates/validation/src/rules/variables_in_allowed_position.rs @@ -1,16 +1,19 @@ -use std::borrow::Cow; -use std::collections::{HashMap, HashSet}; +use std::{ + borrow::Cow, + collections::{HashMap, HashSet}, +}; use graphgate_schema::TypeExt; -use parser::types::{ - ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, Type, - VariableDefinition, +use parser::{ + types::{ + ExecutableDocument, FragmentDefinition, FragmentSpread, OperationDefinition, Type, + VariableDefinition, + }, + Pos, Positioned, }; -use parser::{Pos, Positioned}; use value::{Name, Value}; -use crate::utils::Scope; -use crate::{Visitor, VisitorContext}; +use crate::{utils::Scope, Visitor, VisitorContext}; #[derive(Default)] pub struct VariableInAllowedPosition<'a> { diff --git a/crates/validation/src/suggestion.rs b/crates/validation/src/suggestion.rs index a935d89..dc1b01b 100644 --- a/crates/validation/src/suggestion.rs +++ b/crates/validation/src/suggestion.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; -use std::fmt::Write; +use std::{collections::HashMap, fmt::Write}; fn levenshtein_distance(s1: &str, s2: &str) -> usize { let mut column: Vec<_> = (0..=s1.len()).collect(); diff --git a/crates/validation/src/test_harness.rs b/crates/validation/src/test_harness.rs index b32e18f..cb7f920 100644 --- a/crates/validation/src/test_harness.rs +++ b/crates/validation/src/test_harness.rs @@ -3,8 +3,10 @@ use once_cell::sync::Lazy; use parser::types::ExecutableDocument; use value::Variables; -use crate::visitor::{visit, Visitor, VisitorContext}; -use crate::RuleError; +use crate::{ + visitor::{visit, Visitor, VisitorContext}, + RuleError, +}; static SCHEMA: Lazy = Lazy::new(|| ComposedSchema::parse(include_str!("test_harness.graphql")).unwrap()); @@ -18,7 +20,7 @@ where V: Visitor<'a> + 'a, F: Fn() -> V, { - let mut ctx = VisitorContext::new(&*SCHEMA, doc, variables); + let mut ctx = VisitorContext::new(&SCHEMA, doc, variables); let mut visitor = factory(); visit(&mut visitor, &mut ctx, doc); if ctx.errors.is_empty() { diff --git a/crates/validation/src/utils.rs b/crates/validation/src/utils.rs index b811c8b..88f318a 100644 --- a/crates/validation/src/utils.rs +++ b/crates/validation/src/utils.rs @@ -1,5 +1,7 @@ -use std::collections::HashSet; -use std::fmt::{Display, Formatter, Result as FmtResult}; +use std::{ + collections::HashSet, + fmt::{Display, Formatter, Result as FmtResult}, +}; use graphgate_schema::{ComposedSchema, TypeKind}; use parser::types::{BaseType, Type}; diff --git a/crates/validation/src/visitor.rs b/crates/validation/src/visitor.rs index 2d2ea40..9ed4a85 100644 --- a/crates/validation/src/visitor.rs +++ b/crates/validation/src/visitor.rs @@ -1,12 +1,14 @@ use std::collections::HashMap; use graphgate_schema::{ComposedSchema, MetaType, TypeKind}; -use parser::types::{ - BaseType, Directive, ExecutableDocument, Field, FragmentDefinition, FragmentSpread, - InlineFragment, OperationDefinition, OperationType, Selection, SelectionSet, Type, - TypeCondition, VariableDefinition, +use parser::{ + types::{ + BaseType, Directive, ExecutableDocument, Field, FragmentDefinition, FragmentSpread, + InlineFragment, OperationDefinition, OperationType, Selection, SelectionSet, Type, + TypeCondition, VariableDefinition, + }, + Pos, Positioned, }; -use parser::{Pos, Positioned}; use value::{Name, Value, Variables}; use crate::RuleError; diff --git a/examples/accounts.rs b/examples/accounts.rs index accf1d4..7ff16fa 100644 --- a/examples/accounts.rs +++ b/examples/accounts.rs @@ -42,7 +42,7 @@ impl Subscription { async fn users(&self) -> impl Stream { async_stream::stream! { loop { - tokio::time::sleep(Duration::from_secs(fastrand::u64((1..3)))).await; + tokio::time::sleep(Duration::from_secs(fastrand::u64(1..3))).await; yield User { id: "1234".into(), username: "Me".to_string() }; } } diff --git a/examples/products.rs b/examples/products.rs index bd6e7dc..15ed1c1 100644 --- a/examples/products.rs +++ b/examples/products.rs @@ -35,7 +35,7 @@ impl Subscription { async fn products(&self) -> impl Stream { async_stream::stream! { loop { - tokio::time::sleep(Duration::from_secs(fastrand::u64((5..10)))).await; + tokio::time::sleep(Duration::from_secs(fastrand::u64(5..10))).await; yield Product { upc: "top-1".to_string(), name: "Trilby".to_string(), diff --git a/examples/reviews.rs b/examples/reviews.rs index 2a09573..ecd2900 100644 --- a/examples/reviews.rs +++ b/examples/reviews.rs @@ -46,7 +46,7 @@ impl Product { } async fn error(&self) -> Result { - return Err("custom error"); + Err("custom error") } } @@ -79,7 +79,7 @@ impl Subscription { async fn reviews(&self) -> impl Stream { async_stream::stream! { loop { - tokio::time::sleep(Duration::from_secs(fastrand::u64((5..10)))).await; + tokio::time::sleep(Duration::from_secs(fastrand::u64(5..10))).await; yield Review { body: "A highly effective form of birth control.".into(), author: User { id: "1234".into() }, diff --git a/rustfmt.toml b/rustfmt.toml deleted file mode 100644 index 32a9786..0000000 --- a/rustfmt.toml +++ /dev/null @@ -1 +0,0 @@ -edition = "2018" diff --git a/src/k8s.rs b/src/k8s.rs index 388fd95..a135356 100644 --- a/src/k8s.rs +++ b/src/k8s.rs @@ -1,8 +1,10 @@ use anyhow::{Context, Result}; use graphgate_handler::{ServiceRoute, ServiceRouteTable}; use k8s_openapi::api::core::v1::Service; -use kube::api::{ListParams, ObjectMeta}; -use kube::{Api, Client}; +use kube::{ + api::{ListParams, ObjectMeta}, + Api, Client, +}; const NAMESPACE_PATH: &str = "/var/run/secrets/kubernetes.io/serviceaccount/namespace"; const LABEL_GRAPHQL_SERVICE: &str = "graphgate.org/service"; @@ -30,7 +32,7 @@ fn get_annotation_value<'a>(meta: &'a ObjectMeta, name: &str) -> Option<&'a str> } fn get_gateway_or_default(gateway_name: &str) -> String { - match gateway_name.len() > 0 { + match !gateway_name.is_empty() { true => { tracing::trace!( "Found gateway name: {}. Looking for gateway labels instead.", @@ -71,8 +73,7 @@ pub async fn find_graphql_services(gateway_name: &str) -> Result Result { service_name = %config.service_name, "Initialize Jaeger" ); - let provider = opentelemetry_jaeger::new_pipeline() - .with_agent_endpoint(&config.agent_endpoint) + let provider = opentelemetry_jaeger::new_agent_pipeline() + .with_endpoint(&config.agent_endpoint) .with_service_name(&config.service_name) .build_batch(opentelemetry::runtime::Tokio) .context("Failed to initialize jaeger.")?; @@ -89,13 +81,13 @@ fn init_tracer(config: &Config) -> Result { } pub fn metrics( - exporter: PrometheusExporter, + registry: Registry, ) -> impl Filter + Clone { warp::path!("metrics").and(warp::get()).map({ move || { let mut buffer = Vec::new(); let encoder = TextEncoder::new(); - let metric_families = exporter.registry().gather(); + let metric_families = registry.gather(); if let Err(err) = encoder.encode(&metric_families, &mut buffer) { return HttpResponse::builder() .status(StatusCode::INTERNAL_SERVER_ERROR) @@ -121,7 +113,12 @@ async fn main() -> Result<()> { ) .with_context(|| format!("Failed to parse config file '{}'.", options.config))?; let _uninstall = init_tracer(&config)?; - let exporter = opentelemetry_prometheus::exporter().init(); + let registry = Registry::new(); + let exporter = opentelemetry_prometheus::exporter() + .with_registry(registry.clone()) + .build()?; + let meter_provider = MeterProvider::builder().with_reader(exporter).build(); + global::set_meter_provider(meter_provider); let mut shared_route_table = SharedRouteTable::default(); if !config.services.is_empty() { @@ -189,14 +186,14 @@ async fn main() -> Result<()> { .parse() .context(format!("Failed to parse bind addr '{}'", config.bind))?; if let Some(warp_cors) = cors { - let routes = graphql.or(health).or(metrics(exporter)).with(warp_cors); + let routes = graphql.or(health).or(metrics(registry)).with(warp_cors); let (addr, server) = warp::serve(routes) .bind_with_graceful_shutdown(bind_addr, signal::ctrl_c().map(|_| ())); tracing::info!(addr = %addr, "Listening"); server.await; tracing::info!("Server shutdown"); } else { - let routes = graphql.or(health).or(metrics(exporter)); + let routes = graphql.or(health).or(metrics(registry)); let (addr, server) = warp::serve(routes) .bind_with_graceful_shutdown(bind_addr, signal::ctrl_c().map(|_| ())); tracing::info!(addr = %addr, "Listening");