#orm #compiler #sea-orm #entity #dbml #schema

sea-orm-dbml

DBML 到 SeaORM 实体编译器

2 个版本

0.1.0-beta.22023年5月7日
0.1.0-beta.12023年1月20日

#1811数据库接口

每月 23 次下载

MIT/Apache

24KB
512 代码行

SeaORM DBML

SeaORM 实体的数据库标记语言 (DBML) 编译器。

crate MSRV MIT or Apache 2.0 licensed unsafe forbidden

为什么选择 DBML?

DBML(数据库标记语言)是一种开源的 DSL 语言,用于定义和记录数据库模式和结构。它设计得简单、一致且易于阅读。

了解更多: 官方文档

此项目旨在将 DBML 作为编写 SeaORM 实体的语言。

输出

以下是将 DBML 编译为 SeaORM 实体的示例。

Table user {
  id integer [pk]
  username varchar
  role varchar
}
//! Generated by sea-orm-dbml 0.1.0

pub mod user {
  use sea_orm::entity::prelude::*;

  #[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
  #[sea_orm(table_name = "user", schema_name = "public")]
  pub struct Model {
    #[sea_orm(column_type = "Integer", primary_key, auto_increment = false)]
    pub id: i32,
    #[sea_orm(column_type = "String(None)")]
    pub username: String,
    #[sea_orm(column_type = "String(None)")]
    pub role: String,
  }

  #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
  pub enum Relation {}

  impl ActiveModelBehavior for ActiveModel {}
}

如何使用它?

use std::{ffi::OsString, error::Error};

use sea_orm_dbml::{compiler::config::Config, *};

fn main() -> Result<(), Box<dyn Error>> {
  compile(Config {
    in_path: OsString::from("path/to/file.dbml"),
    out_path: OsString::from("path/to/out/mod.rs"),
    target: compiler::config::Target::Postgres,
    ..Default::default()
  })
}

许可证

许可协议为以下之一

贡献

除非您明确声明,否则您提交给作品中的任何有意贡献,根据 Apache-2.0 许可证定义,应作为上述双重许可,不附加任何额外条款或条件。

始终欢迎您参与、贡献和一起努力。

依赖项

~3MB
~62K SLoC