use crate::{ data::MediaCache, error::Error, requests::{BreakerStrategy, Requests}, }; use actix_web::{body::BodyStream, web, HttpResponse}; use uuid::Uuid; #[tracing::instrument(name = "Media", skip(media, requests))] pub(crate) async fn route( media: web::Data, requests: web::Data, uuid: web::Path, ) -> Result { let uuid = uuid.into_inner(); if let Some(url) = media.get_url(uuid).await? { let res = requests .fetch_response(&url, BreakerStrategy::Allow404AndBelow) .await?; let mut response = HttpResponse::build(crate::http1::status_to_http02(res.status())); for (name, value) in res.headers().iter().filter(|(h, _)| *h != "connection") { response.insert_header(( crate::http1::name_to_http02(name), crate::http1::value_to_http02(value), )); } return Ok(response.body(BodyStream::new(res.bytes_stream()))); } Ok(HttpResponse::NotFound().finish()) }