Browse Source

[xitca-web] update wasm bench. (#8219)

fakeshadow 2 years ago
parent
commit
9ce10abc6f

+ 34 - 34
frameworks/Rust/xitca-web/Cargo.lock

@@ -10,7 +10,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
- "syn 2.0.15",
+ "syn 2.0.16",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -221,7 +221,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
- "syn 2.0.15",
+ "syn 2.0.16",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -365,9 +365,9 @@ checksum = "9028f49264629065d057f340a86acb84867925865f73bbf8d47b4d149a7e88b8"
 
 
 [[package]]
 [[package]]
 name = "libc"
 name = "libc"
-version = "0.2.142"
+version = "0.2.144"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
 
 
 [[package]]
 [[package]]
 name = "libmimalloc-sys"
 name = "libmimalloc-sys"
@@ -584,18 +584,18 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "proc-macro2"
 name = "proc-macro2"
-version = "1.0.56"
+version = "1.0.58"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8"
 dependencies = [
 dependencies = [
  "unicode-ident",
  "unicode-ident",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "quote"
 name = "quote"
-version = "1.0.26"
+version = "1.0.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
 ]
 ]
@@ -669,7 +669,7 @@ dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
  "serde",
  "serde",
- "syn 2.0.15",
+ "syn 2.0.16",
  "toml",
  "toml",
 ]
 ]
 
 
@@ -707,22 +707,22 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 
 [[package]]
 [[package]]
 name = "serde"
 name = "serde"
-version = "1.0.162"
+version = "1.0.163"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71b2f6e1ab5c2b98c05f0f35b236b22e8df7ead6ffbf51d7808da7f8817e7ab6"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
 dependencies = [
 dependencies = [
  "serde_derive",
  "serde_derive",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "serde_derive"
 name = "serde_derive"
-version = "1.0.162"
+version = "1.0.163"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2a0814352fd64b58489904a44ea8d90cb1a91dcb6b4f5ebabc32c8318e93cb6"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
- "syn 2.0.15",
+ "syn 2.0.16",
 ]
 ]
 
 
 [[package]]
 [[package]]
@@ -798,9 +798,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "socket2"
 name = "socket2"
-version = "0.5.2"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d283f86695ae989d1e18440a943880967156325ba025f05049946bff47bcc2b"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
 dependencies = [
 dependencies = [
  "libc",
  "libc",
  "windows-sys 0.48.0",
  "windows-sys 0.48.0",
@@ -835,9 +835,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "syn"
 name = "syn"
-version = "2.0.15"
+version = "2.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
 dependencies = [
 dependencies = [
  "proc-macro2",
  "proc-macro2",
  "quote",
  "quote",
@@ -867,9 +867,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 
 [[package]]
 [[package]]
 name = "tokio"
 name = "tokio"
-version = "1.28.0"
+version = "1.28.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3c786bf8134e5a3a166db9b29ab8f48134739014a3eca7bc6bfa95d673b136f"
+checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
 dependencies = [
 dependencies = [
  "autocfg",
  "autocfg",
  "bytes",
  "bytes",
@@ -901,7 +901,7 @@ dependencies = [
  "pin-project-lite",
  "pin-project-lite",
  "postgres-protocol",
  "postgres-protocol",
  "postgres-types",
  "postgres-types",
- "socket2 0.5.2",
+ "socket2 0.5.3",
  "tokio",
  "tokio",
  "tokio-util",
  "tokio-util",
 ]
 ]
@@ -982,9 +982,9 @@ dependencies = [
 
 
 [[package]]
 [[package]]
 name = "tracing-core"
 name = "tracing-core"
-version = "0.1.30"
+version = "0.1.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
 dependencies = [
 dependencies = [
  "once_cell",
  "once_cell",
 ]
 ]
@@ -1194,7 +1194,7 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-http"
 name = "xitca-http"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "futures-core",
  "futures-core",
  "http",
  "http",
@@ -1202,7 +1202,7 @@ dependencies = [
  "httpdate",
  "httpdate",
  "itoa",
  "itoa",
  "pin-project-lite",
  "pin-project-lite",
- "socket2 0.5.2",
+ "socket2 0.5.3",
  "tokio",
  "tokio",
  "tokio-uring",
  "tokio-uring",
  "tracing",
  "tracing",
@@ -1215,7 +1215,7 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-io"
 name = "xitca-io"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
  "tokio",
  "tokio",
@@ -1226,7 +1226,7 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-postgres"
 name = "xitca-postgres"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "fallible-iterator",
  "fallible-iterator",
  "percent-encoding",
  "percent-encoding",
@@ -1242,7 +1242,7 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-router"
 name = "xitca-router"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "xitca-unsafe-collection",
  "xitca-unsafe-collection",
 ]
 ]
@@ -1250,9 +1250,9 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-server"
 name = "xitca-server"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
- "socket2 0.5.2",
+ "socket2 0.5.3",
  "tokio",
  "tokio",
  "tokio-uring",
  "tokio-uring",
  "tracing",
  "tracing",
@@ -1264,12 +1264,12 @@ dependencies = [
 [[package]]
 [[package]]
 name = "xitca-service"
 name = "xitca-service"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 
 
 [[package]]
 [[package]]
 name = "xitca-unsafe-collection"
 name = "xitca-unsafe-collection"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "bytes",
  "bytes",
 ]
 ]
@@ -1296,13 +1296,13 @@ dependencies = [
  "xitca-server",
  "xitca-server",
  "xitca-service",
  "xitca-service",
  "xitca-unsafe-collection",
  "xitca-unsafe-collection",
- "xitca-web 0.1.0 (git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738)",
+ "xitca-web 0.1.0 (git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59)",
 ]
 ]
 
 
 [[package]]
 [[package]]
 name = "xitca-web"
 name = "xitca-web"
 version = "0.1.0"
 version = "0.1.0"
-source = "git+https://github.com/HFQR/xitca-web.git?rev=024dfaabeacefdeb6b4a76eb4ef48b88b055c738#024dfaabeacefdeb6b4a76eb4ef48b88b055c738"
+source = "git+https://github.com/HFQR/xitca-web.git?rev=061a61adc33205a7d7a124cee5665522a3df4d59#061a61adc33205a7d7a124cee5665522a3df4d59"
 dependencies = [
 dependencies = [
  "futures-core",
  "futures-core",
  "pin-project-lite",
  "pin-project-lite",

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

@@ -81,13 +81,13 @@ codegen-units = 1
 panic = "abort"
 panic = "abort"
 
 
 [patch.crates-io]
 [patch.crates-io]
-xitca-http = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-io = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-router = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-server = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-service = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-unsafe-collection = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
-xitca-web = { git = "https://github.com/HFQR/xitca-web.git", rev = "024dfaabeacefdeb6b4a76eb4ef48b88b055c738" }
+xitca-http = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-io = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-postgres = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-router = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-server = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-service = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-unsafe-collection = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
+xitca-web = { git = "https://github.com/HFQR/xitca-web.git", rev = "061a61adc33205a7d7a124cee5665522a3df4d59" }
 
 
 mio = { git = "https://github.com/fakeshadow/mio.git", rev = "2e80aa89ee94a0e2d343331b8df106d7321148b9" }
 mio = { git = "https://github.com/fakeshadow/mio.git", rev = "2e80aa89ee94a0e2d343331b8df106d7321148b9" }

+ 16 - 16
frameworks/Rust/xitca-web/src/db.rs

@@ -6,7 +6,7 @@ use std::{
 };
 };
 
 
 use futures_util::stream::{FuturesUnordered, TryStreamExt};
 use futures_util::stream::{FuturesUnordered, TryStreamExt};
-use xitca_postgres::{statement::Statement, AsyncIterator, Postgres, ToSql};
+use xitca_postgres::{statement::Statement, AsyncIterator, Postgres};
 use xitca_unsafe_collection::no_hash::NoHashBuilder;
 use xitca_unsafe_collection::no_hash::NoHashBuilder;
 
 
 use super::{
 use super::{
@@ -78,12 +78,12 @@ pub async fn create(config: &str) -> HandleResult<Client> {
 impl Client {
 impl Client {
     async fn query_one_world(&self, id: i32) -> HandleResult<World> {
     async fn query_one_world(&self, id: i32) -> HandleResult<World> {
         self.client
         self.client
-            .query_raw(&self.world, &[&id])
+            .query_raw(&self.world, [id])
             .await?
             .await?
             .next()
             .next()
             .await
             .await
             .ok_or_else(|| format!("World {id} does not exist"))?
             .ok_or_else(|| format!("World {id} does not exist"))?
-            .map(|row| World::new(row.get_raw(0), row.get_raw(1)))
+            .map(|row| World::new(row.get(0), row.get(1)))
             .map_err(Into::into)
             .map_err(Into::into)
     }
     }
 
 
@@ -122,19 +122,16 @@ impl Client {
 
 
         let worlds = worlds.try_collect::<Vec<_>>().await?;
         let worlds = worlds.try_collect::<Vec<_>>().await?;
 
 
-        let mut params = Vec::<&(dyn ToSql + Sync)>::with_capacity(num as usize * 3);
-
-        for w in &worlds {
-            params.push(&w.id);
-            params.push(&w.randomnumber);
-        }
-        for w in &worlds {
-            params.push(&w.id);
-        }
+        let params = worlds
+            .iter()
+            .map(|w| [w.id, w.randomnumber])
+            .flatten()
+            .chain(worlds.iter().map(|w| w.id))
+            .collect::<Vec<_>>();
 
 
         let st = self.updates.get(&num).unwrap();
         let st = self.updates.get(&num).unwrap();
 
 
-        self.client.execute(st, params.as_slice()).await?;
+        self.client.execute_raw(st, &params).await?;
 
 
         Ok(worlds)
         Ok(worlds)
     }
     }
@@ -142,13 +139,16 @@ impl Client {
     pub async fn tell_fortune(&self) -> HandleResult<Fortunes> {
     pub async fn tell_fortune(&self) -> HandleResult<Fortunes> {
         let mut items = Vec::with_capacity(32);
         let mut items = Vec::with_capacity(32);
 
 
-        items.push(Fortune::new(0, "Additional fortune added at request time."));
+        items.push(Fortune::from_static(
+            0,
+            "Additional fortune added at request time.",
+        ));
 
 
-        let mut stream = self.client.query_raw::<&[i32]>(&self.fortune, &[]).await?;
+        let mut stream = self.client.query_raw::<[i32; 0]>(&self.fortune, []).await?;
 
 
         while let Some(row) = stream.next().await {
         while let Some(row) = stream.next().await {
             let row = row?;
             let row = row?;
-            items.push(Fortune::new(row.get_raw(0), row.get_raw::<String>(1)));
+            items.push(Fortune::new(row.get(0), row.get(1)));
         }
         }
 
 
         items.sort_by(|it, next| it.message.cmp(&next.message));
         items.sort_by(|it, next| it.message.cmp(&next.message));

+ 10 - 11
frameworks/Rust/xitca-web/src/main_iou.rs

@@ -34,7 +34,7 @@ use xitca_http::{
     util::service::context::{Context as Ctx, ContextBuilder},
     util::service::context::{Context as Ctx, ContextBuilder},
 };
 };
 use xitca_io::{
 use xitca_io::{
-    bytes::{Bytes, BytesMut, PagedBytesMut},
+    bytes::{Bytes, BytesMut},
     io_uring::IoBuf,
     io_uring::IoBuf,
     net::TcpStream,
     net::TcpStream,
 };
 };
@@ -169,28 +169,27 @@ where
     {
     {
         async {
         async {
             let mut ctx = Context::<_, 8>::new(self.date.get());
             let mut ctx = Context::<_, 8>::new(self.date.get());
-            let mut paged = PagedBytesMut::new();
+            let mut read_buf = BytesMut::new();
             let mut write_buf = BytesMut::with_capacity(4096);
             let mut write_buf = BytesMut::with_capacity(4096);
 
 
             let std = stream.into_std()?;
             let std = stream.into_std()?;
             let stream = tokio_uring::net::TcpStream::from_std(std);
             let stream = tokio_uring::net::TcpStream::from_std(std);
 
 
             loop {
             loop {
-                let mut buf = paged.into_inner();
-
-                let len = buf.len();
-                let rem = buf.capacity() - len;
+                let len = read_buf.len();
+                let rem = read_buf.capacity() - len;
                 if rem < 4096 {
                 if rem < 4096 {
-                    buf.reserve(4096 - rem);
+                    read_buf.reserve(4096 - rem);
                 }
                 }
 
 
-                let (res, buf) = stream.read(buf.slice(len..)).await;
+                let (res, buf) = stream.read(read_buf.slice(len..)).await;
+                read_buf = buf.into_inner();
                 if res? == 0 {
                 if res? == 0 {
                     break;
                     break;
                 }
                 }
-                paged = PagedBytesMut::from(buf.into_inner());
 
 
-                while let Some((req, _)) = ctx.decode_head::<{ usize::MAX }>(&mut paged).unwrap() {
+                while let Some((req, _)) = ctx.decode_head::<{ usize::MAX }>(&mut read_buf).unwrap()
+                {
                     let (parts, body) = self.service.call(req).await.unwrap().into_parts();
                     let (parts, body) = self.service.call(req).await.unwrap().into_parts();
                     let mut encoder = ctx.encode_head(parts, &body, &mut write_buf).unwrap();
                     let mut encoder = ctx.encode_head(parts, &body, &mut write_buf).unwrap();
                     let mut body = pin!(body);
                     let mut body = pin!(body);
@@ -202,9 +201,9 @@ where
                 }
                 }
 
 
                 let (res, b) = stream.write_all(write_buf).await;
                 let (res, b) = stream.write_all(write_buf).await;
-                res?;
                 write_buf = b;
                 write_buf = b;
                 write_buf.clear();
                 write_buf.clear();
+                res?;
             }
             }
 
 
             stream.shutdown(std::net::Shutdown::Both)
             stream.shutdown(std::net::Shutdown::Both)

+ 24 - 3
frameworks/Rust/xitca-web/src/ser.rs

@@ -1,6 +1,7 @@
 #![allow(dead_code)]
 #![allow(dead_code)]
 
 
-use std::borrow::Cow;
+#[cfg(feature = "pg")]
+use xitca_unsafe_collection::bytes::BytesStr;
 
 
 pub struct Message {
 pub struct Message {
     message: &'static str,
     message: &'static str,
@@ -31,12 +32,32 @@ impl World {
 #[cfg_attr(feature = "pg-orm", derive(Queryable))]
 #[cfg_attr(feature = "pg-orm", derive(Queryable))]
 pub struct Fortune {
 pub struct Fortune {
     pub id: i32,
     pub id: i32,
-    pub message: Cow<'static, str>,
+    #[cfg(feature = "pg")]
+    pub message: BytesStr,
+    #[cfg(not(feature = "pg"))]
+    pub message: String,
 }
 }
 
 
+#[cfg(feature = "pg")]
 impl Fortune {
 impl Fortune {
     #[inline]
     #[inline]
-    pub fn new(id: i32, message: impl Into<Cow<'static, str>>) -> Self {
+    pub const fn from_static(id: i32, message: &'static str) -> Self {
+        Self {
+            id,
+            message: BytesStr::from_static(message),
+        }
+    }
+
+    #[inline]
+    pub const fn new(id: i32, message: BytesStr) -> Self {
+        Self { id, message }
+    }
+}
+
+#[cfg(not(feature = "pg"))]
+impl Fortune {
+    #[inline]
+    pub fn new(id: i32, message: impl Into<String>) -> Self {
         Self {
         Self {
             id,
             id,
             message: message.into(),
             message: message.into(),

+ 1 - 1
frameworks/Rust/xitca-web/src/util.rs

@@ -23,7 +23,7 @@ impl QueryParse for Option<&str> {
 }
 }
 
 
 #[allow(clippy::declare_interior_mutable_const)]
 #[allow(clippy::declare_interior_mutable_const)]
-pub const SERVER_HEADER_VALUE: HeaderValue = HeaderValue::from_static("TFB");
+pub const SERVER_HEADER_VALUE: HeaderValue = HeaderValue::from_static("X");
 
 
 pub type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
 pub type Error = Box<dyn std::error::Error + Send + Sync + 'static>;
 
 

+ 12 - 11
frameworks/Rust/xitca-web/xitca-web-wasm.dockerfile

@@ -1,26 +1,27 @@
 FROM rust:1.67 AS compile
 FROM rust:1.67 AS compile
 
 
-ARG WASMTIME_VERSION=6.0.0
+ARG WASMTIME_VERSION=8.0.1
 
 
 WORKDIR /tmp
 WORKDIR /tmp
 COPY / ./
 COPY / ./
 RUN curl -LSs "https://github.com/bytecodealliance/wasmtime/releases/download/v${WASMTIME_VERSION}/wasmtime-v${WASMTIME_VERSION}-$(uname -m)-linux.tar.xz" | \
 RUN curl -LSs "https://github.com/bytecodealliance/wasmtime/releases/download/v${WASMTIME_VERSION}/wasmtime-v${WASMTIME_VERSION}-$(uname -m)-linux.tar.xz" | \
-      tar --strip-components=1 -Jx && \
-    rustup target add wasm32-wasi && \
-    cargo build --bin xitca-web-wasm --features serde,web --release --target wasm32-wasi
+tar --strip-components=2 -Jx && \
+rustup target add wasm32-wasi && \
+cargo build --bin xitca-web-wasm --features serde,web --release --target wasm32-wasi
 
 
 FROM ubuntu:22.04
 FROM ubuntu:22.04
 
 
 COPY --from=compile \
 COPY --from=compile \
-     /tmp/target/wasm32-wasi/release/xitca-web-wasm.wasm \
-     /tmp/wasmtime \
-     /opt/xitca-web-wasm/
+/tmp/target/wasm32-wasi/release/xitca-web-wasm.wasm \
+/tmp/wasmtime \
+/opt/xitca-web-wasm/
 EXPOSE 8080
 EXPOSE 8080
 ARG BENCHMARK_ENV
 ARG BENCHMARK_ENV
 ARG TFB_TEST_DATABASE
 ARG TFB_TEST_DATABASE
 ARG TFB_TEST_NAME
 ARG TFB_TEST_NAME
 
 
-CMD /opt/xitca-web-wasm/wasmtime run \
-      --env FD_COUNT=3 \
-      --tcplisten 0.0.0.0:8080 \
-      /opt/xitca-web-wasm/xitca-web-wasm.wasm
+CMD /opt/xitca-web-wasm/wasmtime compile /opt/xitca-web-wasm/xitca-web-wasm.wasm && \
+/opt/xitca-web-wasm/wasmtime run xitca-web-wasm.cwasm \
+--allow-precompiled \
+--env FD_COUNT=3 \
+--tcplisten 0.0.0.0:8080