diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ae21b..80bffbd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## v0.5.0 + +- Add `From` impls for `HxResponseTrigger`, `HxResponseTriggerAfterSettle`, and + `HxResponseTriggerAfterSwap`, allowing them to take any iterator where `T: + Into`. + ## v0.4.0 - Added support for all [htmx response diff --git a/Cargo.toml b/Cargo.toml index 6b97b68..c898f59 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ guards = ["tower", "futures-core", "pin-project-lite"] serde = ["dep:serde", "dep:serde_json"] [dependencies] -axum = { git = "https://github.com/tokio-rs/axum", branch = "main", default-features = false } +axum = { version = "0.7", default-features = false } # Optional dependencies required for the `guards` feature. tower = { version = "0.4", default-features = false, optional = true } diff --git a/README.md b/README.md index 7bdb487..de08967 100644 --- a/README.md +++ b/README.md @@ -38,15 +38,6 @@ Simply run `cargo add axum-htmx` to add the library to your project. -If you are using the unreleased branch of `axum` from GitHub, you can build -against the `main` version of `axum-htmx` by adding the following to your -`Cargo.toml`: - -```toml -[dependencies] -axum-htmx = { git = "https://github.com/robertwayne/axum-htmx" } -``` - ## Extractors All of the [htmx request headers](https://htmx.org/reference/#request_headers) @@ -155,7 +146,8 @@ async fn index() -> (&'static str, HxResponseTrigger) { can use via the `serde` feature flag and the `HxEvent` type. ```rust -use axum_htmx::HxEvent; +use axum_htmx::serde::HxEvent; +use serde_json::json; // Note that we are using `HxResponseTrigger` from the `axum_htmx::serde` module // instead of the root module. @@ -171,7 +163,7 @@ async fn index() -> (&'static str, HxResponseTrigger) { ) .unwrap(); - ("Hello, world!", HxResponseTrigger(event)) + ("Hello, world!", HxResponseTrigger(vec![event])) } ``` diff --git a/src/responders.rs b/src/responders.rs index c6e273f..778818e 100644 --- a/src/responders.rs +++ b/src/responders.rs @@ -220,9 +220,13 @@ impl IntoResponseParts for HxReselect { #[derive(Debug, Clone)] pub struct HxResponseTrigger(pub Vec); -impl HxResponseTrigger { - pub fn new(events: &[&str]) -> Self { - Self(events.iter().map(|e| e.to_string()).collect()) +impl From for HxResponseTrigger +where + T: IntoIterator, + T::Item: ToString, +{ + fn from(value: T) -> Self { + Self(value.into_iter().map(|s| s.to_string()).collect()) } } @@ -258,6 +262,16 @@ impl IntoResponseParts for HxResponseTrigger { #[derive(Debug, Clone)] pub struct HxResponseTriggerAfterSettle(pub Vec); +impl From for HxResponseTriggerAfterSettle +where + T: IntoIterator, + T::Item: ToString, +{ + fn from(value: T) -> Self { + Self(value.into_iter().map(|s| s.to_string()).collect()) + } +} + impl IntoResponseParts for HxResponseTriggerAfterSettle { type Error = HxError; @@ -289,6 +303,16 @@ impl IntoResponseParts for HxResponseTriggerAfterSettle { #[derive(Debug, Clone)] pub struct HxResponseTriggerAfterSwap(pub Vec); +impl From for HxResponseTriggerAfterSwap +where + T: IntoIterator, + T::Item: ToString, +{ + fn from(value: T) -> Self { + Self(value.into_iter().map(|s| s.to_string()).collect()) + } +} + impl IntoResponseParts for HxResponseTriggerAfterSwap { type Error = HxError;