mirror of
https://github.com/LemmyNet/activitypub-federation-rust.git
synced 2024-06-03 05:49:28 +00:00
9332c81458
* feat: add actix feature flag * (WIP)feat: add axum feature * WIP: axum veridy digest + example Note: this does not compile yet * WIP * chore: clippy lints * Use actix rt for axum example * ci: run example in CI for both actix and axum * feat: add json wrapper type for axum * docs: update readme with actix and axum feature flags * fix: fix ci * chore: more clippy lints * refactor: update according to PR comment and factorize 'verify_digest'
33 lines
1 KiB
Rust
33 lines
1 KiB
Rust
use crate::APUB_JSON_CONTENT_TYPE;
|
|
use axum::response::IntoResponse;
|
|
use http::header;
|
|
use serde::Serialize;
|
|
|
|
/// A wrapper struct to respond with [`APUB_JSON_CONTENT_TYPE`]
|
|
/// in axum handlers
|
|
///
|
|
/// ## Example:
|
|
/// ```rust, no_run
|
|
/// use activitypub_federation::deser::context::WithContext;
|
|
/// async fn http_get_user() -> Result<ApubJson<WithContext<Person>>, Error> {
|
|
/// let user = WithContext::new_default(M);
|
|
///
|
|
/// Ok(ApubJson(WithContext::new_default(MyUser::default())))
|
|
/// }
|
|
/// ```
|
|
#[derive(Debug, Clone, Copy, Default)]
|
|
pub struct ApubJson<Json: Serialize>(pub Json);
|
|
|
|
impl<Json: Serialize> IntoResponse for ApubJson<Json> {
|
|
fn into_response(self) -> axum::response::Response {
|
|
let mut response = axum::response::Json(self.0).into_response();
|
|
response.headers_mut().insert(
|
|
header::CONTENT_TYPE,
|
|
APUB_JSON_CONTENT_TYPE
|
|
.parse()
|
|
.expect("Parsing 'application/activity+json' should never fail"),
|
|
);
|
|
response
|
|
}
|
|
}
|