1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rustでhyper使ってHTMLを扱ってみた

Posted at

RustでWebアプリケーション?

Go言語によるWebアプリケーション開発を読んでいて、これはRustで書くとどうなるんだろうかと思って、「1.1 シンプルなWebサーバー」のみ書いてみました。ほんとシンプルなやつです。

私は完全にRust初心者なのでたぶんあまり正しくなかったり非効率だったりしている気がします。

extern crate hyper;

use std::io::Write;
use hyper::Server;
use hyper::server::Request;
use hyper::server::Response;
use hyper::header::ContentType;
use hyper::mime::{Mime, TopLevel, SubLevel};
use hyper::header::ContentLength;



fn hello(_: Request, mut res: Response) {
    let body = b"
        <html>
            <head><title>chat</title></head>
            <body>
                chat!
            </body>
        </html>
    ";
    res.headers_mut().set(ContentLength(body.len() as u64));
    res.headers_mut().set(ContentType(Mime(TopLevel::Text, SubLevel::Html, vec![])));

    let mut res = res.start().unwrap();
    res.write_all(body).unwrap();
}

fn main() {
    Server::http("127.0.0.1:3000")
        .unwrap()
        .handle(hello)
        .unwrap();
}

Webサーバはhyperを使いました。
ironとか使おうと思ったんですが、本と同じ感じでやりたかったんでまずはこれでやってみました。

困ったこと

ContentTypeの指定

ContentTypeを指定する必要があったんだけど、ちょっと指定の仕方が(自分としては)複雑で、ContentType(Mime(TopLevel::Text, SubLevel::Html, vec![]))という記法にたどり着くのに少し時間がかかった。

日本語表示

日本語の表示はまだうまくできてないです。どうやったらいいんだろう。

HTMLを取り扱うサンプルを見つけられなかった

RustのWebアプリケーションのサンプルはほとんどWebAPIで、HTMLを表示するようなサンプルが全然見つからなくて、やり方に苦労しました。
最近の流れとしてフロントとサーバサイドの役割は分かれてるし、JSONとか扱えれば充分とは思いつつも、全く見つからないとは思ってなかった。うまく探したらあるんだろうけど。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?