axumの方が優勢な気がしますが、actixでも問題なくルーティングとテンプレートを使った開発ができそうです。
use actix_web::{get, web, App, HttpServer, HttpResponse};
use askama::Template;
use askama_actix::TemplateToResponse;
#[derive(Template)]
#[template(path = "hello.html")]
struct HelloTemplate {
name: String,
}
#[derive(Template)]
#[template(path = "todo.html")]
struct TodoTemplate {
tasks: Vec<String>,
}
#[get("/hello/{name}")]
async fn hello(name: web::Path<String>) -> HttpResponse {
let hello = HelloTemplate {
name: name.into_inner(),
};
hello.to_response()
}
#[get("/")]
async fn todo() -> HttpResponse {
let tasks = vec!["task1".to_string(), "task2".to_string(), "task3".to_string()];
let todo = TodoTemplate { tasks };
todo.to_response()
}
#[actix_web::main]
async fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(hello).service(todo))
.bind(("0.0.0.0", 8080))?
.run()
.await
}
<html>
<head>
<title>ToDo</title>
</head>
<body>
<ul>
{% for task in tasks %}
<li>{{ task }}</li>
{% endfor %}
</ul>
</body>
</html>