Browse Source

[xitca-web] dep update. (#8781)

* [xitca-web] dep update.

* add auto reconnect to db client.

* fix build.
fakeshadow 1 year ago
parent
commit
6ff7a0c63e

+ 80 - 83
frameworks/Rust/xitca-web/Cargo.lock

@@ -149,12 +149,9 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
 
 [[package]]
 name = "cc"
-version = "1.0.83"
+version = "1.0.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
-dependencies = [
- "libc",
-]
+checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5"
 
 [[package]]
 name = "cfg-if"
@@ -319,9 +316,9 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
 
 [[package]]
 name = "hermit-abi"
-version = "0.3.4"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
 
 [[package]]
 name = "hmac"
@@ -343,9 +340,9 @@ dependencies = [
 
 [[package]]
 name = "http"
-version = "1.0.0"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
+checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
 dependencies = [
  "bytes",
  "fnv",
@@ -411,9 +408,9 @@ checksum = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8"
 
 [[package]]
 name = "libc"
-version = "0.2.152"
+version = "0.2.153"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
 
 [[package]]
 name = "lock_api"
@@ -427,9 +424,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.20"
+version = "0.4.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
 
 [[package]]
 name = "matchit"
@@ -461,9 +458,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.7.1"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7"
 dependencies = [
  "adler",
 ]
@@ -486,9 +483,9 @@ checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
 
 [[package]]
 name = "num-traits"
-version = "0.2.17"
+version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
 dependencies = [
  "autocfg",
 ]
@@ -549,18 +546,18 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
 
 [[package]]
 name = "pin-project"
-version = "1.1.3"
+version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.3"
+version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -625,9 +622,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.76"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
 dependencies = [
  "unicode-ident",
 ]
@@ -705,9 +702,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
 
 [[package]]
 name = "ryu"
-version = "1.0.16"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
+checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
 
 [[package]]
 name = "sailfish"
@@ -768,18 +765,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
 [[package]]
 name = "serde"
-version = "1.0.195"
+version = "1.0.197"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02"
+checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.195"
+version = "1.0.197"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c"
+checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -788,9 +785,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.111"
+version = "1.0.114"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4"
+checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
 dependencies = [
  "itoa",
  "ryu",
@@ -866,12 +863,12 @@ dependencies = [
 
 [[package]]
 name = "socket2"
-version = "0.5.5"
+version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"
 dependencies = [
  "libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -893,9 +890,9 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "2.0.48"
+version = "2.0.52"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -925,9 +922,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.35.1"
+version = "1.36.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
 dependencies = [
  "backtrace",
  "libc",
@@ -935,7 +932,7 @@ dependencies = [
  "num_cpus",
  "pin-project-lite",
  "signal-hook-registry",
- "socket2 0.5.5",
+ "socket2 0.5.6",
  "windows-sys 0.48.0",
 ]
 
@@ -971,9 +968,9 @@ dependencies = [
 
 [[package]]
 name = "tower-http"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0da193277a4e2c33e59e09b5861580c33dd0a637c3883d0fa74ba40c0374af2e"
+checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
 dependencies = [
  "bitflags 2.4.2",
  "bytes",
@@ -1037,9 +1034,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.22"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
 dependencies = [
  "tinyvec",
 ]
@@ -1099,7 +1096,7 @@ version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 dependencies = [
- "windows-targets 0.52.0",
+ "windows-targets 0.52.4",
 ]
 
 [[package]]
@@ -1119,17 +1116,17 @@ dependencies = [
 
 [[package]]
 name = "windows-targets"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
 dependencies = [
- "windows_aarch64_gnullvm 0.52.0",
- "windows_aarch64_msvc 0.52.0",
- "windows_i686_gnu 0.52.0",
- "windows_i686_msvc 0.52.0",
- "windows_x86_64_gnu 0.52.0",
- "windows_x86_64_gnullvm 0.52.0",
- "windows_x86_64_msvc 0.52.0",
+ "windows_aarch64_gnullvm 0.52.4",
+ "windows_aarch64_msvc 0.52.4",
+ "windows_i686_gnu 0.52.4",
+ "windows_i686_msvc 0.52.4",
+ "windows_x86_64_gnu 0.52.4",
+ "windows_x86_64_gnullvm 0.52.4",
+ "windows_x86_64_msvc 0.52.4",
 ]
 
 [[package]]
@@ -1140,9 +1137,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
 
 [[package]]
 name = "windows_aarch64_gnullvm"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
 
 [[package]]
 name = "windows_aarch64_msvc"
@@ -1152,9 +1149,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
 
 [[package]]
 name = "windows_aarch64_msvc"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
 
 [[package]]
 name = "windows_i686_gnu"
@@ -1164,9 +1161,9 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
 
 [[package]]
 name = "windows_i686_gnu"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
 
 [[package]]
 name = "windows_i686_msvc"
@@ -1176,9 +1173,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
 
 [[package]]
 name = "windows_i686_msvc"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
 
 [[package]]
 name = "windows_x86_64_gnu"
@@ -1188,9 +1185,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
 
 [[package]]
 name = "windows_x86_64_gnu"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
 
 [[package]]
 name = "windows_x86_64_gnullvm"
@@ -1200,9 +1197,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
 
 [[package]]
 name = "windows_x86_64_gnullvm"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
 
 [[package]]
 name = "windows_x86_64_msvc"
@@ -1212,15 +1209,15 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
 
 [[package]]
 name = "windows_x86_64_msvc"
-version = "0.52.0"
+version = "0.52.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
 
 [[package]]
 name = "xitca-codegen"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "185ec568d3620ab5129371e5fbfbc8c7b2791f10ed4e0ff216f8784cd896127c"
+checksum = "866906a5f280481ef022ccdec1640730550304bb86b016815d9982fde2f48e3e"
 dependencies = [
  "quote",
  "syn",
@@ -1228,9 +1225,9 @@ dependencies = [
 
 [[package]]
 name = "xitca-http"
-version = "0.2.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23b15032fe8f95903c5d16d49dbf3e336c0fd7b558acc9ca385e992651b522b4"
+checksum = "8b1982607f88759de96dec5b234e9cf835d6a4995e395b65a201e656d0641974"
 dependencies = [
  "futures-core",
  "http",
@@ -1238,7 +1235,7 @@ dependencies = [
  "httpdate",
  "itoa",
  "pin-project-lite",
- "socket2 0.5.5",
+ "socket2 0.5.6",
  "tokio",
  "tokio-uring",
  "tracing",
@@ -1250,9 +1247,9 @@ dependencies = [
 
 [[package]]
 name = "xitca-io"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e887cc8153538637515e0663704f3492803c5bb48eb7947c80689154d965b7e0"
+checksum = "7581c12bcd8b2194271da2117926a577e4e974ab840c7a3f61cc187a249335c8"
 dependencies = [
  "bytes",
  "tokio",
@@ -1263,7 +1260,7 @@ dependencies = [
 [[package]]
 name = "xitca-postgres"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=d79f510197e0f36534fe22b7a467c55dbd683681#d79f510197e0f36534fe22b7a467c55dbd683681"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=13a28c51a2f6e23e4e6b96e508a8af1e5e79d0b6#13a28c51a2f6e23e4e6b96e508a8af1e5e79d0b6"
 dependencies = [
  "fallible-iterator",
  "percent-encoding",
@@ -1287,11 +1284,11 @@ dependencies = [
 
 [[package]]
 name = "xitca-server"
-version = "0.1.0"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07160d17cf458adf7f38a2f7bc37ecb15732909683e614bcfe5f6ac8202bda5"
+checksum = "f48656d81909cb34fcf01288cdaf2bd77848d0f0dcbdc0c429b6ed376f78f4d5"
 dependencies = [
- "socket2 0.5.5",
+ "socket2 0.5.6",
  "tokio",
  "tokio-uring",
  "tracing",
@@ -1308,9 +1305,9 @@ checksum = "09a4a38548b14925111dd99560f0a10d1eb9e3e117fa5471c35387ed6f77b58c"
 
 [[package]]
 name = "xitca-unsafe-collection"
-version = "0.1.0"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c38c5b92c72ba986bb2c2f4fc40ec56e841194773c02278f3c8d4c9733807270"
+checksum = "552a6bf21a5d0dc470644cb3b99f98f44bd414cd6fcca74610465d8196b1d23e"
 dependencies = [
  "bytes",
 ]
@@ -1337,14 +1334,14 @@ dependencies = [
  "xitca-server",
  "xitca-service",
  "xitca-unsafe-collection",
- "xitca-web 0.2.1",
+ "xitca-web 0.4.0",
 ]
 
 [[package]]
 name = "xitca-web"
-version = "0.2.1"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26cb7ab5765524ce47a8c173e16a3184146440e3de3c240ba0d14a617b0f090"
+checksum = "cfae98470b0f55b978ebdccd1317a658590aa6fecec4db61522adaa8e6943747"
 dependencies = [
  "futures-core",
  "http-body",

+ 6 - 6
frameworks/Rust/xitca-web/Cargo.toml

@@ -51,18 +51,18 @@ io-uring = ["xitca-http/io-uring", "xitca-server/io-uring"]
 axum = ["dep:axum", "http-body", "tower", "tower-http", "xitca-web/tower-http-compat" ]
 
 [dependencies]
-xitca-http = "0.2"
-xitca-io = "0.1"
-xitca-server = "0.1"
+xitca-http = "0.4"
+xitca-io = "0.2"
+xitca-server = "0.2"
 xitca-service = "0.1"
-xitca-unsafe-collection = "0.1"
+xitca-unsafe-collection = "0.1.1"
 
 atoi = "2"
 serde = { version = "1" }
 serde_json = { version = "1" }
 
 # web optional
-xitca-web = { version = "0.2", features = ["json"], optional = true }
+xitca-web = { version = "0.4", features = ["json"], optional = true }
 
 # raw-pg optional
 xitca-postgres = { version = "0.1", optional = true }
@@ -92,5 +92,5 @@ codegen-units = 1
 panic = "abort"
 
 [patch.crates-io]
-xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "d79f510197e0f36534fe22b7a467c55dbd683681" }
+xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "13a28c51a2f6e23e4e6b96e508a8af1e5e79d0b6" }
 mio = { git = "https://github.com/fakeshadow/mio.git", rev = "52b72d372bfe5807755b7f5e3e1edf282954d6ba" }

+ 15 - 26
frameworks/Rust/xitca-web/src/db.rs

@@ -1,6 +1,8 @@
-use std::{collections::HashMap, fmt::Write, future::IntoFuture};
+use std::{collections::HashMap, fmt::Write};
 
-use xitca_postgres::{statement::Statement, AsyncLendingIterator, Postgres};
+use xitca_postgres::{
+    pipeline::Pipeline, statement::Statement, AsyncLendingIterator, SharedClient,
+};
 use xitca_unsafe_collection::no_hash::NoHashBuilder;
 
 use super::{
@@ -9,7 +11,7 @@ use super::{
 };
 
 pub struct Client {
-    client: xitca_postgres::Client,
+    client: SharedClient,
     #[cfg(not(feature = "pg-sync"))]
     rng: std::cell::RefCell<Rand>,
     #[cfg(feature = "pg-sync")]
@@ -19,27 +21,14 @@ pub struct Client {
     updates: HashMap<u16, Statement, NoHashBuilder>,
 }
 
-impl Drop for Client {
-    fn drop(&mut self) {
-        drop(self.fortune.clone().into_guarded(&self.client));
-        drop(self.world.clone().into_guarded(&self.client));
-        for (_, stmt) in std::mem::take(&mut self.updates) {
-            drop(stmt.into_guarded(&self.client))
-        }
-    }
-}
-
 pub async fn create() -> HandleResult<Client> {
-    let (client, driver) = Postgres::new(DB_URL.to_string()).connect().await?;
-
-    tokio::spawn(tokio::task::unconstrained(driver.into_future()));
+    let mut client = SharedClient::new(DB_URL.to_string()).await?;
 
-    let fortune = client.prepare("SELECT * FROM fortune", &[]).await?.leak();
+    let fortune = client.prepare_cached("SELECT * FROM fortune", &[]).await?;
 
     let world = client
-        .prepare("SELECT * FROM world WHERE id=$1", &[])
-        .await?
-        .leak();
+        .prepare_cached("SELECT * FROM world WHERE id=$1", &[])
+        .await?;
 
     let mut updates = HashMap::default();
 
@@ -59,7 +48,7 @@ pub async fn create() -> HandleResult<Client> {
         q.pop();
         q.push(')');
 
-        let st = client.prepare(&q, &[]).await?.leak();
+        let st = client.prepare_cached(&q, &[]).await?;
         updates.insert(num, st);
     }
 
@@ -94,11 +83,11 @@ impl Client {
             .try_next()
             .await?
             .map(|row| World::new(row.get_raw(0), row.get_raw(1)))
-            .ok_or_else(|| format!("World does not exist").into())
+            .ok_or_else(|| "World does not exist".into())
     }
 
     pub async fn get_worlds(&self, num: u16) -> HandleResult<Vec<World>> {
-        let mut pipe = self.client.pipeline();
+        let mut pipe = Pipeline::new();
 
         {
             let mut rng = self.borrow_rng_mut();
@@ -108,7 +97,7 @@ impl Client {
         let mut worlds = Vec::new();
         worlds.reserve(num as usize);
 
-        let mut res = pipe.run().await?;
+        let mut res = self.client.pipeline(pipe).await?;
         while let Some(mut item) = res.try_next().await? {
             while let Some(row) = item.try_next().await? {
                 worlds.push(World::new(row.get_raw(0), row.get_raw(1)))
@@ -124,7 +113,7 @@ impl Client {
         let mut params = Vec::new();
         params.reserve(len * 3);
 
-        let mut pipe = self.client.pipeline();
+        let mut pipe = Pipeline::new();
 
         {
             let mut rng = self.borrow_rng_mut();
@@ -144,7 +133,7 @@ impl Client {
         worlds.reserve(len);
         let mut r_ids = params.into_iter().skip(1).step_by(2);
 
-        let mut res = pipe.run().await?;
+        let mut res = self.client.pipeline(pipe).await?;
         while let Some(mut item) = res.try_next().await? {
             while let Some(row) = item.try_next().await? {
                 let r_id = r_ids.next().unwrap();

+ 4 - 13
frameworks/Rust/xitca-web/src/main_sync.rs

@@ -6,8 +6,9 @@ mod util;
 use serde::Serialize;
 use xitca_web::{
     codegen::route,
-    handler::{html::Html, json::Json, query::Query, state::StateOwn},
+    handler::{html::Html, json::Json, query::Query, state::StateOwn, text::Text},
     http::{header::SERVER, WebResponse},
+    route::get,
     App,
 };
 
@@ -18,8 +19,8 @@ use util::{HandleResult, SERVER_HEADER_VALUE};
 fn main() -> std::io::Result<()> {
     App::new()
         .with_state(db_diesel::create()?)
-        .at_typed(plaintext)
-        .at_typed(json)
+        .at("/plaintext", get(Text("Hello, World!")))
+        .at("/json", get(Json(ser::Message::new())))
         .at_typed(db)
         .at_typed(fortunes)
         .at_typed(queries)
@@ -36,16 +37,6 @@ fn header(mut res: WebResponse) -> WebResponse {
     res
 }
 
-#[route("/plaintext", method = get)]
-fn plaintext() -> &'static str {
-    "Hello, World!"
-}
-
-#[route("/json", method = get)]
-fn json() -> Json<ser::Message> {
-    Json(ser::Message::new())
-}
-
 #[route("/db", method = get)]
 fn db(StateOwn(pool): StateOwn<Pool>) -> HandleResult<Json<impl Serialize>> {
     pool.get_world().map(Json)

+ 12 - 27
frameworks/Rust/xitca-web/src/main_wasm.rs

@@ -1,46 +1,31 @@
 mod ser;
 mod util;
 
-use std::{env, io, net::TcpListener, os::wasi::io::FromRawFd};
-
 use xitca_web::{
-    handler::{handler_service, json::Json},
+    handler::{json::Json, text::Text},
     http::{header::SERVER, WebResponse},
     route::get,
-    service::Service,
-    App, WebContext,
+    App,
 };
 
-fn main() -> io::Result<()> {
-    let fd = env::var("FD_COUNT")
+fn main() -> std::io::Result<()> {
+    let listener = std::env::var("FD_COUNT")
         .ok()
-        .and_then(|var| var.parse().ok())
+        .and_then(|v| v.parse().ok())
+        .map(|fd| unsafe { std::os::wasi::io::FromRawFd::from_raw_fd(fd) })
         .expect("failed to parse FD_COUNT env");
 
-    let listener = unsafe { TcpListener::from_raw_fd(fd) };
-
     App::new()
-        .at(
-            "/json",
-            get(handler_service(|| async { Json(ser::Message::new()) })),
-        )
-        .at(
-            "/plaintext",
-            get(handler_service(|| async { "Hello, World!" })),
-        )
-        .enclosed_fn(middleware_fn)
+        .at("/json", get(Json(ser::Message::new())))
+        .at("/plaintext", get(Text("Hello, World!")))
+        .map(header)
         .serve()
         .listen(listener)?
         .run()
         .wait()
 }
 
-async fn middleware_fn<S, E>(service: &S, ctx: WebContext<'_>) -> Result<WebResponse, E>
-where
-    S: for<'r> Service<WebContext<'r>, Response = WebResponse, Error = E>,
-{
-    service.call(ctx).await.map(|mut res| {
-        res.headers_mut().append(SERVER, util::SERVER_HEADER_VALUE);
-        res
-    })
+fn header(mut res: WebResponse) -> WebResponse {
+    res.headers_mut().append(SERVER, util::SERVER_HEADER_VALUE);
+    res
 }

+ 1 - 0
frameworks/Rust/xitca-web/src/ser.rs

@@ -11,6 +11,7 @@ use xitca_http::{
 
 use crate::util::Error;
 
+#[derive(Clone)]
 pub struct Message {
     message: &'static str,
 }

+ 1 - 1
frameworks/Rust/xitca-web/xitca-web-axum.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.75
+FROM rust:1.76
 
 ADD ./ /xitca-web
 WORKDIR /xitca-web

+ 1 - 1
frameworks/Rust/xitca-web/xitca-web-iou.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.75
+FROM rust:1.76
 
 ADD ./ /xitca-web
 WORKDIR /xitca-web

+ 1 - 1
frameworks/Rust/xitca-web/xitca-web-sync.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.75
+FROM rust:1.76
 
 ADD ./ /xitca-web
 WORKDIR /xitca-web

+ 1 - 1
frameworks/Rust/xitca-web/xitca-web-wasm.dockerfile

@@ -1,7 +1,7 @@
 ARG WASMTIME_VERSION=15.0.0
 ARG WASM_TARGET=wasm32-wasi-preview1-threads
 
-FROM rust:1.75 AS compile
+FROM rust:1.76 AS compile
 
 ARG WASMTIME_VERSION
 ARG WASM_TARGET

+ 1 - 1
frameworks/Rust/xitca-web/xitca-web.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.75
+FROM rust:1.76
 
 ADD ./ /xitca-web
 WORKDIR /xitca-web