Skip to content

Commit cc80500

Browse files
jrey8343Jared Reyes
andauthored
feat: add warp framework support and fix examples (#9)
* fix: update examples to datastar 1.0.0-RC.7 and new attribute syntax - Update datastar CDN from @main to @1.0.0-RC.7 - Migrate from old attribute syntax to new colon-based syntax: - data-signals-* → data-signals:* - data-bind-* → data-bind:* - data-on-click → data-on:click - data-attr-* → data-attr:* - Replace HTML entities with proper quotes in data-on:click handlers * feat: add warp framework support Add integration for the warp web framework with a new `warp` feature flag. Includes: - src/warp.rs: Core integration module with SSE event support and signal extraction - PatchElements, PatchSignals, ExecuteScript conversions to warp SSE events - ReadSignals extractor for GET (query params) and POST/PUT/PATCH (body) - is_datastar_request and read_signals_optional filters - handle_rejection for proper error responses - examples/warp-hello.rs: Basic hello world example - examples/warp-activity-feed.rs: Activity feed streaming example - examples/warp-test-suite.rs: Comprehensive test suite Dependencies added: warp, serde_urlencoded, bytes --------- Co-authored-by: Jared Reyes <jaredreyes@Jareds-MacBook-Pro-2.local>
1 parent 5909034 commit cc80500

File tree

10 files changed

+939
-27
lines changed

10 files changed

+939
-27
lines changed

Cargo.lock

Lines changed: 157 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: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ description = "Datastar SDK for Rust"
88
documentation = "https://docs.rs/datastar"
99
edition = "2024"
1010
homepage = "https://data-star.dev"
11-
keywords = ["datastar", "backend", "axum", "rocket"]
11+
keywords = ["datastar", "backend", "axum", "rocket", "warp"]
1212
license = "MIT"
1313
name = "datastar"
1414
readme = "README.md"
@@ -25,6 +25,7 @@ axum = ["dep:axum", "dep:serde", "dep:serde_json"]
2525
http2 = []
2626
rocket = ["dep:rocket"]
2727
tracing = ["dep:tracing"]
28+
warp = ["dep:warp", "dep:serde", "dep:serde_json", "dep:serde_urlencoded", "dep:bytes"]
2829

2930
[dependencies]
3031
axum = { version = "0.8.4", default-features = false, optional = true, features = [
@@ -41,6 +42,9 @@ serde_json = { version = "1", default-features = false, optional = true, feature
4142
"std",
4243
] }
4344
tracing = { version = "0.1.41", optional = true }
45+
warp = { version = "0.4.2", default-features = false, optional = true, features = ["server"] }
46+
serde_urlencoded = { version = "0.7", optional = true }
47+
bytes = { version = "1", optional = true }
4448

4549
[dev-dependencies]
4650
asynk-strim = { version = "0.1" }
@@ -55,6 +59,7 @@ tokio-stream = { version = "0.1.17" }
5559
tracing = { version = "0.1.41" }
5660
tracing-subscriber = { version = "0.3.20", features = ["env-filter"] }
5761
tracing-test = { version = "0.2.5" }
62+
warp = { version = "0.4.2" }
5863

5964
[lints.rust]
6065
unreachable_pub = "deny"
@@ -122,3 +127,15 @@ required-features = ["rocket"]
122127
[[example]]
123128
name = "rocket-hello-channel"
124129
required-features = ["rocket"]
130+
131+
[[example]]
132+
name = "warp-hello"
133+
required-features = ["warp", "tracing"]
134+
135+
[[example]]
136+
name = "warp-activity-feed"
137+
required-features = ["warp", "tracing"]
138+
139+
[[example]]
140+
name = "warp-test-suite"
141+
required-features = ["warp", "tracing"]

examples/activity-feed.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<script src="https://unpkg.com/@tailwindcss/browser@4"></script>
66
<script
77
type="module"
8-
src="https://cdn.jsdelivr.net/gh/starfederation/datastar@main/bundles/datastar.js"
8+
src="https://cdn.jsdelivr.net/gh/starfederation/datastar@1.0.0-RC.7/bundles/datastar.js"
99
></script>
1010
</head>
1111
<body class="bg-white dark:bg-gray-900 text-lg max-w-xl mx-auto my-16">
@@ -20,8 +20,8 @@ <h1 class="text-gray-900 dark:text-white text-3xl font-semibold">Datastar SDK Ac
2020
<div class="space-x-2">
2121
<input
2222
id="events"
23-
data-signals-events="200"
24-
data-bind-events
23+
data-signals:events="200"
24+
data-bind:events
2525
type="number"
2626
step="100"
2727
min="0"
@@ -32,8 +32,8 @@ <h1 class="text-gray-900 dark:text-white text-3xl font-semibold">Datastar SDK Ac
3232
<div class="space-x-2">
3333
<input
3434
id="interval"
35-
data-signals-interval="10"
36-
data-bind-interval
35+
data-signals:interval="10"
36+
data-bind:interval
3737
type="number"
3838
step="10"
3939
min="0"
@@ -43,9 +43,9 @@ <h1 class="text-gray-900 dark:text-white text-3xl font-semibold">Datastar SDK Ac
4343
</div>
4444
<button
4545
id="start-button"
46-
data-on-click="@post(&#39;/event/generate&#39;)"
47-
data-signals-generating="false"
48-
data-attr-disabled="$generating"
46+
data-on:click="@post('/event/generate')"
47+
data-signals:generating="false"
48+
data-attr:disabled="$generating"
4949
data-class="{
5050
'bg-gray-500 text-gray-300 cursor-wait': $generating,
5151
'bg-sky-500 text-white cursor-pointer hover:bg-sky-700 hover:text-gray-100': !$generating,
@@ -56,25 +56,25 @@ <h1 class="text-gray-900 dark:text-white text-3xl font-semibold">Datastar SDK Ac
5656
</button>
5757
<span>&nbsp;|&nbsp;</span>
5858
<button
59-
data-on-click="@post(&#39;/event/done&#39;)"
59+
data-on:click="@post('/event/done')"
6060
class="rounded-md bg-sky-500 px-5 py-2.5 leading-5 font-semibold text-white hover:bg-sky-700 hover:text-gray-100 cursor-pointer"
6161
>
6262
Done
6363
</button>
6464
<button
65-
data-on-click="@post(&#39;/event/warn&#39;)"
65+
data-on:click="@post('/event/warn')"
6666
class="rounded-md bg-sky-500 px-5 py-2.5 leading-5 font-semibold text-white hover:bg-sky-700 hover:text-gray-100 cursor-pointer"
6767
>
6868
Warn
6969
</button>
7070
<button
71-
data-on-click="@post(&#39;/event/fail&#39;)"
71+
data-on:click="@post('/event/fail')"
7272
class="rounded-md bg-sky-500 px-5 py-2.5 leading-5 font-semibold text-white hover:bg-sky-700 hover:text-gray-100 cursor-pointer"
7373
>
7474
Fail
7575
</button>
7676
<button
77-
data-on-click="@post(&#39;/event/info&#39;)"
77+
data-on:click="@post('/event/info')"
7878
class="rounded-md bg-sky-500 px-5 py-2.5 leading-5 font-semibold text-white hover:bg-sky-700 hover:text-gray-100 cursor-pointer"
7979
>
8080
Info
@@ -85,15 +85,15 @@ <h1 class="text-gray-900 dark:text-white text-3xl font-semibold">Datastar SDK Ac
8585
Click <code class="text-fuchsia-600">Generate</code> to create
8686
<span data-text="$events">200</span> events, <span data-text="$interval">10</span> milliseconds
8787
apart.<br />
88-
<span class="text-gray-100" data-signals-total="0"> Total: <span data-text="$total">0</span> </span>
88+
<span class="text-gray-100" data-signals:total="0"> Total: <span data-text="$total">0</span> </span>
8989
|
90-
<span class="text-green-500" data-signals-done="0"> Done: <span data-text="$done">0</span> </span>
90+
<span class="text-green-500" data-signals:done="0"> Done: <span data-text="$done">0</span> </span>
9191
|
92-
<span class="text-yellow-500" data-signals-warn="0"> Warn: <span data-text="$warn">0</span> </span>
92+
<span class="text-yellow-500" data-signals:warn="0"> Warn: <span data-text="$warn">0</span> </span>
9393
|
94-
<span class="text-red-500" data-signals-fail="0"> Fail: <span data-text="$fail">0</span> </span>
94+
<span class="text-red-500" data-signals:fail="0"> Fail: <span data-text="$fail">0</span> </span>
9595
|
96-
<span class="text-blue-500" data-signals-info="0"> Info: <span data-text="$info">0</span> </span>
96+
<span class="text-blue-500" data-signals:info="0"> Info: <span data-text="$info">0</span> </span>
9797
<br />
9898
-------------------------------------------------------------
9999
</div>

0 commit comments

Comments
 (0)