Skip to content

Commit 32acc8e

Browse files
author
system
committed
Add WASM Mime. Init Complex Query example
1 parent e32ad32 commit 32acc8e

8 files changed

Lines changed: 96 additions & 3 deletions

File tree

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ members = [
1818
"examples/request-tracking",
1919
"examples/engine",
2020
"rwf-admin",
21-
"examples/files", "examples/users", "examples/openapi", "examples/oidc", "examples/callbacks", "examples/cursor",
21+
"examples/files", "examples/users", "examples/openapi", "examples/oidc", "examples/callbacks", "examples/cursor", "examples/complex-queries",
2222
]
2323
exclude = ["examples/rails", "rwf-ruby", "examples/django", "rwf-fuzz"]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
name = "complex-queries"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
rwf = {path = "../../rwf"}

examples/complex-queries/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Complex Query
2+
Rwf implements a wide range of postgres query features.
3+
So it is possible to use other queries defined in a WITH statement as well as COMBINED queries (UNION, EXCEPT, INTERSECT).
4+
5+
## Example
6+
7+
```rust
8+
use rwf::prelude;
9+
use rwf::model::prelude::*;
10+
#[derive(Clone, macros::Model, Serialize, Deserialize)]
11+
struct User {
12+
id: Option<i64>,
13+
name: String,
14+
mail: String
15+
}
16+
#[tokio::main]
17+
async fn main() -> Result<(), rwf::model::Error> {
18+
let query = User::all().except
19+
20+
Ok(())
21+
}
22+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use rwf::model::Join;
2+
use rwf::model::select::Op;
3+
use rwf::prelude::*;
4+
5+
#[derive(Debug, Serialize, Deserialize, macros::Model, Clone, PartialEq, Eq)]
6+
#[has_many(Order)]
7+
pub struct User {
8+
id: Option<i64>,
9+
username: String,
10+
email: String,
11+
}
12+
13+
#[derive(Debug, Serialize, Deserialize, macros::Model, Clone, PartialEq, Eq)]
14+
#[belongs_to(User)]
15+
pub struct Order {
16+
id: Option<i64>,
17+
user_id: i64,
18+
expensive: bool,
19+
}
20+
impl Order {
21+
pub fn latest_user_order_id() -> Scope<Self> {
22+
Self::all()
23+
.group_by(&["user_id"])
24+
.select_aggregated(&[("id", "MAX", Some("id"))])
25+
}
26+
pub fn latest_user_order() -> Scope<Self> {
27+
Self::all()
28+
.with(Order::latest_user_order_id(), "latest_id")
29+
.add_join(Join::new(Self::table_name(), "latet_id", "id", "id"))
30+
}
31+
}
32+
33+
#[tokio::main]
34+
async fn main() -> Result<(), rwf::model::Error> {
35+
Ok(())
36+
}

examples/cursor/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ async fn main() -> Result<(), rwf::http::Error> {
101101
#[cfg(test)]
102102
mod tests {
103103
use super::AppLog;
104-
use rwf::model::prelude::*;
105-
use tokio_stream::{Stream, StreamExt};
106104
use rwf::model::migrate;
105+
use rwf::model::prelude::*;
106+
use tokio_stream::StreamExt;
107107

108108
#[tokio::test]
109109
async fn test_cur_eq_query() {

rwf-tests/static/index.html

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<!doctype html>
2+
<html lang="en-US">
3+
<head>
4+
<meta charset="utf-8" />
5+
<title>hello-wasm example</title>
6+
</head>
7+
<body>
8+
<script type="module">
9+
import init, { greet, sum } from "./pkg/wasm.js";
10+
11+
init().then(() => {
12+
greet("WebAssembly");
13+
window.rswasm = {
14+
sum: sum,
15+
greet: greet
16+
}
17+
});
18+
</script>
19+
</body>
20+
</html>

rwf/src/http/body.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ impl Body {
204204
"ttf" => "font/ttf",
205205
"txt" => "text/plain",
206206
"vsd" => "application/vnd.visio",
207+
"wasm" => "application/wasm",
207208
"wav" => "audio/wav",
208209
"weba" => "audio/webm",
209210
"webm" => "video/webm",

0 commit comments

Comments
 (0)