Fixed docs

This commit is contained in:
ItsEthra 2023-12-01 22:15:10 +03:00
parent 1dfff29673
commit f07518d5a2
3 changed files with 29 additions and 19 deletions

View file

@ -30,5 +30,8 @@ pin-project-lite = { version = "0.2", optional = true }
serde = { version = "1", features = ["derive"], optional = true } serde = { version = "1", features = ["derive"], optional = true }
serde_json = { version = "1", optional = true } serde_json = { version = "1", optional = true }
[dev-dependencies]
axum = { version = "0.7.1", default-features = false }
[package.metadata.docs.rs] [package.metadata.docs.rs]
all-features = true all-features = true

View file

@ -74,11 +74,9 @@ any of your responses.
| `HX-Reswap` | `HxReswap` | `axum_htmx::responders::SwapOption` | | `HX-Reswap` | `HxReswap` | `axum_htmx::responders::SwapOption` |
| `HX-Retarget` | `HxRetarget` | `String` | | `HX-Retarget` | `HxRetarget` | `String` |
| `HX-Reselect` | `HxReselect` | `String` | | `HX-Reselect` | `HxReselect` | `String` |
| `HX-Trigger` | `HxResponseTrigger` | `String` or `axum_htmx::serde::HxEvent`* | | `HX-Trigger` | `HxResponseTrigger` | `axum_htmx::serde::HxEvent` |
| `HX-Trigger-After-Settle` | `HxResponseTriggerAfterSettle` | `String` or `axum_htmx::serde::HxEvent`* | | `HX-Trigger-After-Settle` | `HxResponseTriggerAfterSettle` | `axum_htmx::serde::HxEvent` |
| `HX-Trigger-After-Swap` | `HxResponseTriggerAfterSwap` | `String` or `axum_htmx::serde::HxEvent`* | | `HX-Trigger-After-Swap` | `HxResponseTriggerAfterSwap` | `axum_htmx::serde::HxEvent` |
_* requires the `serde` feature flag to be enabled._
## Request Guards ## Request Guards
@ -137,7 +135,7 @@ use axum_htmx::HxResponseTrigger;
async fn index() -> (&'static str, HxResponseTrigger) { async fn index() -> (&'static str, HxResponseTrigger) {
( (
"Hello, world!", "Hello, world!",
HxResponseTrigger(vec!["my-event".to_string()]), HxResponseTrigger::from(["my-event", "second-event"]),
) )
} }
``` ```
@ -146,16 +144,16 @@ async fn index() -> (&'static str, HxResponseTrigger) {
can use via the `serde` feature flag and the `HxEvent` type. can use via the `serde` feature flag and the `HxEvent` type.
```rust ```rust
use axum_htmx::serde::HxEvent;
use serde_json::json; use serde_json::json;
// Note that we are using `HxResponseTrigger` from the `axum_htmx::serde` module // Note that we are using `HxResponseTrigger` from the `axum_htmx::serde` module
// instead of the root module. // instead of the root module.
use axum_htmx::serde::HxResponseTrigger; use axum_htmx::{HxEvent, HxResponseTrigger};
async fn index() -> (&'static str, HxResponseTrigger) { async fn index() -> (&'static str, HxResponseTrigger) {
let event = HxEvent::new_with_data( let event = HxEvent::new_with_data(
"my-event", "my-event",
// May be any object that implements `serde::Serialize`
json!({"level": "info", "message": { json!({"level": "info", "message": {
"title": "Hello, world!", "title": "Hello, world!",
"body": "This is a test message.", "body": "This is a test message.",
@ -188,10 +186,10 @@ fn router_two() -> Router {
## Feature Flags ## Feature Flags
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
| Flag | Default | Description | Dependencies | | Flag | Default | Description | Dependencies |
|----------|----------|------------------------------------------------------------------------------------|---------------------------------------------| |----------|----------|------------------------------------------------------------|---------------------------------------------|
| `guards` | Disabled | Adds request guard layers. | `tower`, `futures-core`, `pin-project-lite` | | `guards` | Disabled | Adds request guard layers. | `tower`, `futures-core`, `pin-project-lite` |
| `serde` | Disabled | Adds serde support for the `HxResponseTrigger*` and `HxLocation` response headers. | `serde`, `serde_json` | | `serde` | Disabled | Adds serde support for the `HxEvent` and `LocationOptions` | `serde`, `serde_json` |
<!-- markdownlint-enable --> <!-- markdownlint-enable -->
## Contributing ## Contributing

View file

@ -23,7 +23,7 @@ impl HxEvent {
} }
} }
/// Creates new event with event data. /// Creates new event with data.
#[cfg(feature = "serde")] #[cfg(feature = "serde")]
#[cfg_attr(feature = "unstable", doc(cfg(feature = "serde")))] #[cfg_attr(feature = "unstable", doc(cfg(feature = "serde")))]
pub fn new_with_data<T: ::serde::Serialize>( pub fn new_with_data<T: ::serde::Serialize>(
@ -116,8 +116,10 @@ impl IntoResponseParts for HxResponseTrigger {
type Error = HxError; type Error = HxError;
fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> { fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> {
res.headers_mut() if !self.0.is_empty() {
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?); res.headers_mut()
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?);
}
Ok(res) Ok(res)
} }
@ -148,8 +150,10 @@ impl IntoResponseParts for HxResponseTriggerAfterSettle {
type Error = HxError; type Error = HxError;
fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> { fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> {
res.headers_mut() if !self.0.is_empty() {
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?); res.headers_mut()
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?);
}
Ok(res) Ok(res)
} }
@ -180,8 +184,10 @@ impl IntoResponseParts for HxResponseTriggerAfterSwap {
type Error = HxError; type Error = HxError;
fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> { fn into_response_parts(self, mut res: ResponseParts) -> Result<ResponseParts, Self::Error> {
res.headers_mut() if !self.0.is_empty() {
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?); res.headers_mut()
.insert(headers::HX_TRIGGER, events_to_header_value(self.0)?);
}
Ok(res) Ok(res)
} }
@ -210,5 +216,8 @@ mod tests {
let expected_value = r#"{"my-event":{"level":"info","message":{"body":"This is a test message.","title":"Hello, world!"}}}"#; let expected_value = r#"{"my-event":{"level":"info","message":{"body":"This is a test message.","title":"Hello, world!"}}}"#;
assert_eq!(header_value, HeaderValue::from_static(expected_value)); assert_eq!(header_value, HeaderValue::from_static(expected_value));
let value = events_to_header_value(HxResponseTrigger::from(["foo", "bar"]).0).unwrap();
assert_eq!(value, HeaderValue::from_static("foo, bar"));
} }
} }