Как отправить файл, включенный в include_bytes! как железный ответ?
Я пытаюсь отправить файл, который я включил в двоичный файл с include_bytes!
в приложении Iron. Я хочу закончить с одним файлом для моего приложения, и ему нужно очень мало файлов HTML, CSS и JS. Вот небольшая тестовая установка, с которой я возился:
extern crate iron;
use iron::prelude::*;
use iron::status;
use iron::mime::Mime;
fn main() {
let index_html = include_bytes!("static/index.html");
println!("Hello, world!");
Iron::new(| _: &mut Request| {
let content_type = "text/html".parse::<Mime>().unwrap();
Ok(Response::with((content_type, status::Ok, index_html)))
}).http("localhost:8001").unwrap();
}
Конечно, это не работает, так как index_html
имеет тип &[u8; 78]
src/main.rs:16:12: 16:26 error: the trait `modifier::Modifier<iron::response::Response>` is not implemented for the type `&[u8; 78]` [E0277]
src/main.rs:16 Ok(Response::with((content_type, status::Ok, index_html)))
Так как я совсем новичок в Rust and Iron, я понятия не имею, как к этому подойти. Я пытался чему-то научиться из железных документов, но я думаю, что моих знаний по Rust недостаточно, чтобы по-настоящему понять их, особенно это modifier::Modifier
черта должна быть.
Как мне этого добиться? Могу ли я преобразовать тип моего статического ресурса во что-то, что примет Iron, или мне нужно это реализовать? Modifier
черта как-то?
1 ответ
Компилятор предлагает альтернативу impl
:
src/main.rs:13:12: 13:26 help: the following implementations were found:
src/main.rs:13:12: 13:26 help: <&'a [u8] as modifier::Modifier<iron::response::Response>>
Чтобы срез прожил достаточно долго, его легче заменить index_html
переменная с глобальной константой, и так как мы должны указать тип констант, давайте определим его как &'static [u8]
,
extern crate iron;
use iron::prelude::*;
use iron::status;
use iron::mime::Mime;
const INDEX_HTML: &'static [u8] = include_bytes!("static/index.html");
fn main() {
println!("Hello, world!");
Iron::new(| _: &mut Request| {
let content_type = "text/html".parse::<Mime>().unwrap();
Ok(Response::with((content_type, status::Ok, INDEX_HTML)))
}).http("localhost:8001").unwrap();
}
Кстати, я пытался найти реализации для Modifier
в документации, но я думаю, что они не перечислены, к сожалению. Тем не менее, я нашел несколько реализаций для Modifier<Response>
в источнике для iron::modifiers
модуль.