8个版本 (4个重大更新)
0.5.3 | 2023年12月11日 |
---|---|
0.5.2 | 2023年11月30日 |
0.4.0 | 2023年11月21日 |
0.3.0 | 2023年11月21日 |
0.1.0 | 2023年11月20日 |
在模板引擎中排名第151
每月下载量15,883
在5个包中使用(2个直接使用)
18KB
263 代码行
rrgen
声明式代码生成和注入的微型框架。
入门
模板使用Tera
作为模板语言(类似于liquid),并使用特殊的元数据/主体分离frontmatter。
模板的第一部分指示模板应该做什么,以及应该执行哪些injections
。
第二部分是实际要生成的目标文件。
示例模板controller.t
---
to: tests/fixtures/realistic/generated/controllers/{{name | snake_case }}.rs
injections:
- into: tests/fixtures/realistic/generated/controllers/mod.rs
append: true
content: "pub mod {{ name | snake_case }};"
- into: tests/fixtures/realistic/generated/app.rs
after: "AppRoutes::"
content: " .add_route(controllers::{{ name | snake_case }}::routes())"
---
#![allow(clippy::unused_async)]
use axum::{extract::State, routing::get};
use rustyrails::{
app::AppContext,
controller::{format, Routes},
Result,
};
pub async fn echo(req_body: String) -> String {
req_body
}
pub async fn hello(State(ctx): State<AppContext>) -> Result<String> {
// do something with context (database, etc)
format::text("hello")
}
pub fn routes() -> Routes {
Routes::new()
.prefix("{{ name | snake_case }}")
.add("/", get(hello))
.add("/echo", get(echo))
}
渲染模板将创建一个或多个文件,可能注入到文件中,操作方式如下
use std::fs;
use rrgen::Rgen;
use serde_json::json;
let rrgen = RRgen::default();
let vars = json!({"name": "post"});
rrgen.generate(
&fs::read_to_string("tests/fixtures/test1/template.t").unwrap(),
&vars,
)
.unwrap();
vars
将是同时暴露给frontmatter部分和body部分的变量。
依赖项
~9–18MB
~249K SLoC