sqlx-askama-template 0.3.9

Type-safe SQL templates with Askama and SQLx
Documentation
use askama::Template;
use ntex::http::Response;
use ntex::web::types::State;
use ntex::web::{self, Responder};
use sqlx::AnyPool;

use sqlx::any::install_default_drivers;
use sqlx_askama_template::SqlTemplate;

#[derive(sqlx::prelude::FromRow, PartialEq, Eq, Debug, serde::Serialize)]
struct User {
    id: i64,
    name: String,
}
#[derive(SqlTemplate)]
#[template(source = r#"
    select {{e(user_id)}} as id,{{e(user_name)}} as name
    union all 
    {%- let id=99999_i64 %}
    {%- let name="super man" %}
    select {{et(id)}} as id,{{et(name)}} as name
"#)]
pub struct UserQuery<'a> {
    pub user_id: i64,
    pub user_name: &'a str,
}
#[derive(askama::Template)]
#[template(
    ext = "html",
    source = r#"
   <html>
    <head>
        <title>SQLx Askama Template</title>
    </head>
    <body>
        <h1>SQLx Askama Template</h1>
        <p>Welcome to the SQLx Askama Template!</p>
        <h1>query database with askama template</h1>
        <table border="1">
            <tr>
                <th>id</th>
                <th>name</th>
            </tr>
            {% for user in users %}
            <tr>
                <td>{{ user.id }}</td>
                <td>{{ user.name }}</td>    
            </tr>
            {% endfor %}
    </body>
</html>"#
)]
struct IndexHtml {
    users: Vec<User>,
}
async fn root(pool: State<AnyPool>) -> impl Responder {
    //  test count
    let user_query = UserQuery {
        user_id: 1,
        user_name: "ntex",
    };
    let count = user_query.adapter_render().count(&*pool).await.unwrap();
    println!("count: {count}");

    let mut conn = pool.acquire().await.unwrap();
    let users: Vec<User> = user_query
        .adapter_render()
        .fetch_all_as(&mut *conn)
        .await
        .unwrap();

    Response::Ok().body(IndexHtml { users }.render().unwrap())
}
#[ntex::main]
async fn main() -> std::io::Result<()> {
    install_default_drivers();

    let pool = AnyPool::connect("sqlite://db.file?mode=memory")
        .await
        .unwrap();
    web::HttpServer::new(async move || {
        web::App::new()
            .state(pool.clone())
            .route("/", web::get().to(root))
    })
    .bind(("0.0.0.0", 3000))?
    .run()
    .await
}