Browse Source

update ohkami to v0.17 (#8942)

* update ohkami v0.16 -> v0.17 & refactor some

* Fix: dockerfile
kanarus 1 year ago
parent
commit
d8d779ed0d

+ 36 - 36
frameworks/Rust/ohkami/Cargo.lock

@@ -141,9 +141,9 @@ checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9"
 
 [[package]]
 name = "cc"
-version = "1.0.94"
+version = "1.0.95"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f6e324229dc011159fcc089755d1e2e216a90d43a7dea6853ca740b84f35e7"
+checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b"
 
 [[package]]
 name = "cfg-if"
@@ -417,7 +417,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
@@ -770,9 +770,9 @@ dependencies = [
 
 [[package]]
 name = "ohkami"
-version = "0.16.0"
+version = "0.17.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5eabbddbe02f121e8b6bcaa10bebcc5b42eee2b0a749ce0801a1b0d304fa6006"
+checksum = "ffca2ddf66df3484fd9dfa7f88f923e2082b9934dc7e247616002f8bf71ec81c"
 dependencies = [
  "byte_reader",
  "hmac",
@@ -787,7 +787,7 @@ dependencies = [
 
 [[package]]
 name = "ohkami_framework_benchmarks"
-version = "0.15.0"
+version = "0.17.1"
 dependencies = [
  "futures-util",
  "ohkami",
@@ -799,9 +799,9 @@ dependencies = [
 
 [[package]]
 name = "ohkami_lib"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7231554f893051d7d645c8c2d07b85e80e96f2f5c39d1a5c8568c63560815d44"
+checksum = "a306cca964938b3e37157c716b4423f09026ceb4439ec5f9353265d03d217b72"
 dependencies = [
  "byte_reader",
  "percent-encoding",
@@ -810,9 +810,9 @@ dependencies = [
 
 [[package]]
 name = "ohkami_macros"
-version = "0.7.0"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6cd88e0259e3e0d02df2d44d5419fa1e3d639c4b5117d5fb6b7f281f7fa670c6"
+checksum = "1cdb435788e84e7262f0ee3fb1d206a4c1830ec17856eb0924b9d8c5f75c7519"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -848,7 +848,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
@@ -970,9 +970,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.79"
+version = "1.0.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
 dependencies = [
  "unicode-ident",
 ]
@@ -1097,9 +1097,9 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.38.32"
+version = "0.38.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
+checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
 dependencies = [
  "bitflags 2.5.0",
  "errno",
@@ -1160,29 +1160,29 @@ checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
 
 [[package]]
 name = "serde"
-version = "1.0.197"
+version = "1.0.198"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
+checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.197"
+version = "1.0.198"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
+checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.115"
+version = "1.0.116"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd"
+checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
 dependencies = [
  "itoa",
  "ryu",
@@ -1213,9 +1213,9 @@ dependencies = [
 
 [[package]]
 name = "signal-hook-registry"
-version = "1.4.1"
+version = "1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
 dependencies = [
  "libc",
 ]
@@ -1516,9 +1516,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.58"
+version = "2.0.60"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687"
+checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1539,22 +1539,22 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.58"
+version = "1.0.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
+checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.58"
+version = "1.0.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
+checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
@@ -1599,7 +1599,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
@@ -1642,7 +1642,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
@@ -2044,11 +2044,11 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.58",
+ "syn 2.0.60",
 ]
 
 [[package]]
 name = "zeroize"
-version = "1.7.0"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+checksum = "63381fa6624bf92130a6b87c0d07380116f80b565c42cf0d754136f0238359ef"

+ 3 - 3
frameworks/Rust/ohkami/Cargo.toml

@@ -1,13 +1,13 @@
 [package]
 name    = "ohkami_framework_benchmarks"
-version = "0.15.0"
+version = "0.17.1"
 edition = "2021"
 authors = ["kanarus <[email protected]>"]
 
 [dependencies]
-ohkami       = { version = "=0.16.0", features = ["rt_tokio"] }
+ohkami       = { version = "=0.17.1", features = ["rt_tokio"] }
 tokio        = { version = "1.37.0" , features = ["full"] }
 rand         = { version = "0.8.5"  , features = ["small_rng"] }
 sqlx         = { version = "0.7.4"  , features = ["postgres", "macros", "runtime-tokio-native-tls"] }
 yarte        = { version = "0.15.7" }
-futures-util = { version = "0.3.30" }
+futures-util = { version = "0.3.30" }

+ 1 - 1
frameworks/Rust/ohkami/README.md

@@ -4,7 +4,7 @@
 
 > Build web app in intuitive and declarative code
 > - *macro-less and type-safe* APIs for intuitive and declarative code
-> - *multi runtime* support:`tokio`, `async-std`
+> - *multi runtime* support:`tokio`, `async-std`, `worker` (Cloudflare Workers)
 
 - [User Guide](https://docs.rs/ohkami/latest/ohkami/)
 - [API Documentation](https://docs.rs/ohkami/latest/ohkami/)

+ 2 - 3
frameworks/Rust/ohkami/ohkami.dockerfile

@@ -1,4 +1,4 @@
-FROM rust:1.76-slim-buster
+FROM rust:1.77-slim-buster
 WORKDIR /ohkami_framework_benchmarks
 
 ENV DATABASE_URL=postgres://benchmarkdbuser:benchmarkdbpass@tfb-database/hello_world
@@ -6,7 +6,6 @@ ENV MAX_CONNECTIONS=56
 ENV MIN_CONNECTIONS=56
 
 COPY ./src        ./src
-COPY ./templates  ./templates
 COPY ./Cargo.toml ./Cargo.toml
 COPY ./Cargo.lock ./Cargo.lock
 
@@ -16,4 +15,4 @@ RUN apt update && apt install -y --no-install-recommends \
 
 RUN RUSTFLAGS="-C target-cpu=native" cargo build --release
 EXPOSE 8000
-CMD ./target/release/ohkami_framework_benchmarks
+CMD ./target/release/ohkami_framework_benchmarks

+ 96 - 0
frameworks/Rust/ohkami/src/fangs.rs

@@ -0,0 +1,96 @@
+use ohkami::prelude::*;
+use crate::Postgres;
+
+
+#[derive(Clone)]
+pub struct SetServer;
+impl FangAction for SetServer {
+    #[inline(always)]
+    async fn back<'a>(&'a self, res: &'a mut ohkami::Response) {
+        res.headers.set().Server("ohkami");
+    }
+}
+
+#[derive(Clone)]
+pub struct UsePostgres(
+    Postgres
+);
+impl UsePostgres {
+    pub async fn init() -> Self {
+        macro_rules! load_env {
+            ($($name:ident as $t:ty)*) => {$(
+                #[allow(non_snake_case)]
+                let $name = ::std::env::var(stringify!($name))
+                    .expect(concat!(
+                        "Failed to load environment variable ",
+                        "`", stringify!($name), "`"
+                    ))
+                    .parse::<$t>()
+                    .unwrap();
+            )*};
+        } load_env! {
+            MAX_CONNECTIONS as u32
+            MIN_CONNECTIONS as u32
+            DATABASE_URL    as String
+        }
+
+        let pool = sqlx::postgres::PgPoolOptions::new()
+            .max_connections(MAX_CONNECTIONS)
+            .min_connections(MIN_CONNECTIONS)
+            .connect(&DATABASE_URL).await
+            .unwrap();
+
+        Self(pool.into())
+    }
+}
+impl FangAction for UsePostgres {
+    #[inline(always)]
+    async fn fore<'a>(&'a self, req: &'a mut Request) -> Result<(), Response> {
+        Ok(req.memorize(self.0.clone()))
+    }
+}
+
+
+/*
+impl Postgres {
+    pub async fn init() -> impl FangAction {
+        #[derive(Clone)]
+        pub struct UsePostgres(Postgres);
+
+        impl FangAction for UsePostgres {
+            #[inline(always)]
+            async fn fore<'a>(&'a self, req: &'a mut Request) -> Result<(), Response> {
+                req.memorize(self.0.clone());
+                Ok(())
+            }
+        }
+
+        macro_rules! load_env {
+            ($($name:ident as $t:ty)*) => {
+                $(
+                    #[allow(non_snake_case)]
+                    let $name = ::std::env::var(stringify!($name))
+                        .expect(concat!(
+                            "Failed to load environment variable ",
+                            "`", stringify!($name), "`"
+                        ))
+                        .parse::<$t>()
+                        .unwrap();
+                )*
+            };
+        } load_env! {
+            MAX_CONNECTIONS as u32
+            MIN_CONNECTIONS as u32
+            DATABASE_URL    as String
+        }
+
+        UsePostgres(Self(
+            sqlx::postgres::PgPoolOptions::new()
+                .max_connections(MAX_CONNECTIONS)
+                .min_connections(MIN_CONNECTIONS)
+                .connect(&DATABASE_URL).await
+                .unwrap()
+        ))
+    }
+}
+*/

+ 7 - 13
frameworks/Rust/ohkami/src/main.rs

@@ -1,11 +1,14 @@
+mod fangs;
+use fangs::{SetServer, UsePostgres};
+
 mod models;
-pub use models::{Fortune, Message, World, WorldsQuery};
+use models::{Fortune, Message, World, WorldsQuery};
 
 mod postgres;
-pub use postgres::Postgres;
+use postgres::Postgres;
 
 mod templates;
-pub use templates::FortunesTemplate;
+use templates::FortunesTemplate;
 
 use ohkami::prelude::*;
 use ohkami::Memory;
@@ -13,16 +16,7 @@ use ohkami::Memory;
 
 #[tokio::main]
 async fn main() {
-    #[derive(Clone)]
-    struct SetServer;
-    impl FangAction for SetServer {
-        #[inline(always)]
-        async fn back<'a>(&'a self, res: &'a mut ohkami::Response) {
-            res.headers.set().Server("ohkami");
-        }
-    }
-
-    Ohkami::with((SetServer, Postgres::init().await), (
+    Ohkami::with((SetServer, UsePostgres::init().await), (
         "/json"     .GET(json_serialization),
         "/db"       .GET(single_database_query),
         "/queries"  .GET(multiple_database_query),

+ 3 - 40
frameworks/Rust/ohkami/src/postgres.rs

@@ -1,51 +1,14 @@
 use futures_util::{stream::FuturesUnordered, TryStreamExt};
 use rand::{rngs::SmallRng, SeedableRng, Rng, thread_rng};
-use ohkami::{utils::FangAction, Request, Response};
 use crate::models::{World, Fortune};
 
 
 #[derive(Clone)]
 pub struct Postgres(sqlx::PgPool);
 
-impl Postgres {
-    pub async fn init() -> impl FangAction {
-        #[derive(Clone)]
-        pub struct UsePostgres(Postgres);
-
-        impl FangAction for UsePostgres {
-            #[inline(always)]
-            async fn fore<'a>(&'a self, req: &'a mut Request) -> Result<(), Response> {
-                req.memorize(self.0.clone());
-                Ok(())
-            }
-        }
-
-        macro_rules! load_env {
-            ($($name:ident as $t:ty)*) => {
-                $(
-                    #[allow(non_snake_case)]
-                    let $name = ::std::env::var(stringify!($name))
-                        .expect(concat!(
-                            "Failed to load environment variable ",
-                            "`", stringify!($name), "`"
-                        ))
-                        .parse::<$t>()
-                        .unwrap();
-                )*
-            };
-        } load_env! {
-            MAX_CONNECTIONS as u32
-            MIN_CONNECTIONS as u32
-            DATABASE_URL    as String
-        }
-
-        UsePostgres(Self(
-            sqlx::postgres::PgPoolOptions::new()
-                .max_connections(MAX_CONNECTIONS)
-                .min_connections(MIN_CONNECTIONS)
-                .connect(&DATABASE_URL).await
-                .unwrap()
-        ))
+impl From<sqlx::PgPool> for Postgres {
+    fn from(pgpool: sqlx::PgPool) -> Self {
+        Self(pgpool)
     }
 }
 

+ 8 - 6
frameworks/Rust/ohkami/src/templates.rs

@@ -4,18 +4,20 @@ use crate::models::Fortune;
 
 
 #[derive(Template)]
-#[template(path="fortunes")]
+#[template(src = r#"<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>
+    {{~# each fortunes ~}}
+    <tr><td>{{id}}</td><td>{{message}}</td></tr>
+    {{~/each ~}}
+</table></body></html>"#)]
 pub struct FortunesTemplate {
     pub fortunes: Vec<Fortune>,
 }
+
 impl IntoResponse for FortunesTemplate {
     fn into_response(self) -> Response {
         match self.call() {
-            Ok(template) => Response::OK().html(template),
-            Err(error)   => {
-                eprintln!("Failed to render template: {error}");
-                Response::InternalServerError()
-            }
+            Ok(template) => Response::OK().with_html(template),
+            Err(_)       => Response::InternalServerError(),
         }
     }
 }

+ 0 - 5
frameworks/Rust/ohkami/templates/fortunes.hbs

@@ -1,5 +0,0 @@
-<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>
-      {{~# each fortunes ~}}
-      <tr><td>{{id}}</td><td>{{message}}</td></tr>
-      {{~/each ~}}
-</table></body></html>