parent
32a4a88548
commit
dd418c872a
|
@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased](https://git.rustybever.be/Chewing_Bever/otter)
|
||||
|
||||
## [0.2.1](https://git.rustybever.be/Chewing_Bever/otter/src/tag/0.2.1)
|
||||
|
||||
### Fixed
|
||||
|
||||
* Serve Content-Type headers for static embedded files
|
||||
|
||||
## [0.2.0](https://git.rustybever.be/Chewing_Bever/otter/src/tag/0.2.0)
|
||||
|
||||
### Added
|
||||
|
|
|
@ -821,7 +821,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "gpodder"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"argon2",
|
||||
"chrono",
|
||||
|
@ -830,7 +830,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "gpodder_sqlite"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"criterion",
|
||||
|
@ -1246,7 +1246,7 @@ checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e"
|
|||
|
||||
[[package]]
|
||||
name = "otter"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"axum",
|
||||
"axum-extra",
|
||||
|
|
|
@ -7,7 +7,7 @@ members = [
|
|||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
edition = "2024"
|
||||
|
||||
[workspace.dependencies]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use std::io::Cursor;
|
||||
|
||||
use axum::{Router, routing::get};
|
||||
use axum::{Router, http::header, response::IntoResponse, routing::get};
|
||||
use axum_extra::{TypedHeader, headers::Range};
|
||||
use axum_range::{KnownSize, Ranged};
|
||||
|
||||
|
@ -9,8 +9,6 @@ use super::Context;
|
|||
const HTMX: &str = include_str!("./htmx_2.0.4.min.js");
|
||||
const PICOCSS: &str = include_str!("./pico_2.1.1.classless.jade.min.css");
|
||||
|
||||
type RangedResponse = Ranged<KnownSize<Cursor<&'static str>>>;
|
||||
|
||||
pub fn router() -> Router<Context> {
|
||||
Router::new()
|
||||
.route("/htmx_2.0.4.min.js", get(get_htmx))
|
||||
|
@ -18,17 +16,24 @@ pub fn router() -> Router<Context> {
|
|||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn serve_static(data: &'static str, range: Option<Range>) -> RangedResponse {
|
||||
fn serve_static(data: &'static str, range: Option<Range>, content_type: &str) -> impl IntoResponse {
|
||||
let cursor = Cursor::new(data);
|
||||
let body = KnownSize::sized(cursor, data.len() as u64);
|
||||
|
||||
Ranged::new(range, body)
|
||||
(
|
||||
[(header::CONTENT_TYPE, content_type)],
|
||||
Ranged::new(range, body),
|
||||
)
|
||||
}
|
||||
|
||||
async fn get_htmx(range: Option<TypedHeader<Range>>) -> RangedResponse {
|
||||
serve_static(HTMX, range.map(|TypedHeader(range)| range))
|
||||
async fn get_htmx(range: Option<TypedHeader<Range>>) -> impl IntoResponse {
|
||||
serve_static(
|
||||
HTMX,
|
||||
range.map(|TypedHeader(range)| range),
|
||||
"text/javascript",
|
||||
)
|
||||
}
|
||||
|
||||
async fn get_picocss(range: Option<TypedHeader<Range>>) -> RangedResponse {
|
||||
serve_static(PICOCSS, range.map(|TypedHeader(range)| range))
|
||||
async fn get_picocss(range: Option<TypedHeader<Range>>) -> impl IntoResponse {
|
||||
serve_static(PICOCSS, range.map(|TypedHeader(range)| range), "text/css")
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue