example_ntex/
example_ntex.rs1use askama::Template;
2use ntex::http::Response;
3use ntex::web::types::State;
4use ntex::web::{self, Responder};
5use sqlx::AnyPool;
6
7use sqlx::any::install_default_drivers;
8use sqlx_askama_template::SqlTemplate;
9
10#[derive(sqlx::prelude::FromRow, PartialEq, Eq, Debug, serde::Serialize)]
11struct User {
12 id: i64,
13 name: String,
14}
15#[derive(SqlTemplate)]
16#[template(source = r#"
17 select {{e(user_id)}} as id,{{e(user_name)}} as name
18 union all
19 {%- let id=99999_i64 %}
20 {%- let name="super man" %}
21 select {{et(id)}} as id,{{et(name)}} as name
22"#)]
23pub struct UserQuery<'a> {
24 pub user_id: i64,
25 pub user_name: &'a str,
26}
27#[derive(askama::Template)]
28#[template(
29 ext = "html",
30 source = r#"
31 <html>
32 <head>
33 <title>SQLx Askama Template</title>
34 </head>
35 <body>
36 <h1>SQLx Askama Template</h1>
37 <p>Welcome to the SQLx Askama Template!</p>
38 <h1>query database with askama template</h1>
39 <table border="1">
40 <tr>
41 <th>id</th>
42 <th>name</th>
43 </tr>
44 {% for user in users %}
45 <tr>
46 <td>{{ user.id }}</td>
47 <td>{{ user.name }}</td>
48 </tr>
49 {% endfor %}
50 </body>
51</html>"#
52)]
53struct IndexHtml {
54 users: Vec<User>,
55}
56async fn root(pool: State<AnyPool>) -> impl Responder {
57 let user_query = UserQuery {
59 user_id: 1,
60 user_name: "ntex",
61 };
62 let count = user_query.adapter_render().count(&*pool).await.unwrap();
63 println!("count: {count}");
64
65 let mut conn = pool.acquire().await.unwrap();
66 let users: Vec<User> = user_query
67 .adapter_render()
68 .fetch_all_as(&mut *conn)
69 .await
70 .unwrap();
71
72 Response::Ok().body(IndexHtml { users }.render().unwrap())
73}
74#[ntex::main]
75async fn main() -> std::io::Result<()> {
76 install_default_drivers();
77
78 let pool = AnyPool::connect("sqlite://db.file?mode=memory")
79 .await
80 .unwrap();
81 web::HttpServer::new(async move || {
82 web::App::new()
83 .state(pool.clone())
84 .route("/", web::get().to(root))
85 })
86 .bind(("0.0.0.0", 3000))?
87 .run()
88 .await
89}