- main
- manifest
- deps
- main
- Install
- Run
use std::io::Cursor;
use fastly::{mime, Error, Request, Response};
const BACKEND_NAME: &str = "origin_0";
#[fastly::main]
fn main(req: Request) -> Result<Response, Error> {
let mut beresp = req.send(BACKEND_NAME)?;
if let Some(mime) = beresp.get_content_type() {
match mime.as_ref() {
"image/jpeg" | "image/png" => annotate_response(&mut beresp)?,
_ => {}
}
}
Ok(beresp)
}
fn annotate_response(resp: &mut Response) -> Result<(), Error> {
let reader = exif::Reader::new();
let image = resp.take_body_bytes();
let mut data = Cursor::new(image.clone());
let exif = reader.read_from_container(&mut data)?;
for f in exif.fields() {
let tag = format!("{}", f.tag);
if !tag.contains("(") && !tag.contains(",") && !tag.contains(" ") {
resp.set_header(
format!("Edge-Exif-{}", tag),
format!("{}", f.display_value().with_unit(&exif)),
);
}
}
resp.get_body_mut().write_bytes(&image);
Ok(())
}