0x90

一回休み

askamaにironのcontent-typeを設定する機能をつけたい

ふと思いついたので完全に走り書き。テンプレートエンジンaskamaとironの連携をしたときに、Content-type: text/htmlを勝手に設定してくれないので、パッチ案。

(本当にアレだったので若干変更w)

askama/lib.rsで

#[cfg(feature = "with-iron")]
pub mod iron {
    ...
    pub use iron::headers::ContentType;
}

generator.rsで

    // Implement iron's Modifier<Response> if enabled
    fn impl_modifier_response(&mut self, state: &'a State) {
        self.write_header(state, "::askama::iron::Modifier<::askama::iron::Response>", &[]);
        self.writeln("fn modify(self, res: &mut ::askama::iron::Response) {");
        self.writeln("res.body = Some(Box::new(self.render().unwrap().into_bytes()));");
        // here
        let ext = state.input.path.extension().map_or("", |s| s.to_str().unwrap_or(""));
        match ext {
            "html" | "htm" => { ::askama::iron::ContentType::html().0.modify(res); },
            _ => (),
        }
        // end
        self.writeln("}");
        self.writeln("}");
    }

ということでこんなんで。