8 个版本
0.1.7 | 2023 年 10 月 7 日 |
---|---|
0.1.6 | 2023 年 10 月 7 日 |
0.1.2 | 2023 年 2 月 20 日 |
0.1.0 | 2023 年 1 月 15 日 |
1890 在 数据库接口
每月 42 次下载
7KB
88 行
gotcha
提供一个特色 Web 框架
旨在
- actix-web 的所有功能
- 自动生成 Swagger API
- 内置消息机制
- 基于环境的配置系统,支持环境解析器
${ANY_ENV_VAR}
和路径变量${app.database.name}
,由 yaac 支持 - 日志系统
- 可选的 Prometheus 集成
- 基于 sqlx 的魔法 ORM
- 基于 cron 的任务系统
开始使用
将依赖项添加到 Cargo.toml
gotcha = {version = "0.1"}
tokio = {version = "1", features = ["macros", 'rt-multi-thread']}
serde = {version="1", features=["derive"]}
use gotcha::{get, App, GotchaAppWrapperExt, GotchaCli, HttpServer, Responder};
use serde::Deserialize;
#[get("/")]
pub async fn hello_world() -> impl Responder {
"hello world"
}
#[derive(Debug, Deserialize, Clone)]
struct Config {}
#[tokio::main]
async fn main() {
GotchaCli::<_, Config>::new()
.server(|config| async move {
HttpServer::new(|| {
App::new()
.into_gotcha()
.service(hello_world)
.data(config)
.done()
})
.bind(("127.0.0.1", 8080))
.unwrap()
.run()
.await;
})
.run()
.await
}
Conservator ORM
Conservator ORM 基于 sqlx,目前仅支持 postgres
#[derive(Debug, Deserialize, Serialize, Domain, FromRow)]
#[domain(table = "users")]
pub struct UserDomain {
#[domain(primary_key)]
pub id: Uuid,
pub username: String,
pub email: String,
pub password: String,
pub role: UserRole,
pub create_at: DateTime<Utc>,
pub last_login_at: DateTime<Utc>,
}
由结构体派生的 Domain
会自动生成方法,例如
find_by_id
返回可选实体fetch_one_by_id
返回实体或引发异常fetch_all
返回所有实体create
通过传递Createable
插入到表中
#[derive(Debug, Deserialize, Serialize, Creatable)]
pub struct NewUser {
pub username: String,
pub email: String,
pub password: String,
}
Createable
意味着它可以由魔法 ORM 执行,使用 UserDomain::create(NewUser{...})
在用户表中创建新用户。
#[sql]
还提供了一些方便的方式来编写自定义 SQL 查询
use conservator::sql;
impl UserService {
#[sql(find)]
pub async fn find_user<E>(email: &str, executor: E) -> Result<Option<UserEntity>, Error> {
"select * from users where email = :email"
}
}
请注意,与 sqlx 的 $1
不同,我们在 SQL 中使用参数 :email
,它可以在无需任何修改的情况下用于原生的 SQL 执行工具,如 IDEA。
依赖项
~16–30MB
~455K SLoC