#sqlx #sea-orm #db #sql-database #sql #compile-time

sea-orm-verify

使用sqlx编译时宏验证sea-orm实体

1 个不稳定版本

0.1.0 2023年4月5日

#22#sea-orm

MIT 许可证

11KB
157

sea-orm-verify

提供 Verify 衍生宏。

#[derive(DeriveEntityModel, Verify)]
#[derive(Debug, Clone, PartialEq)]
#[sea_orm(table_name = "task")]
pub struct Model {
    #[sea_orm(primary_key)]
    pub id: u32,
    pub finish_at: Option<DateTime>,
}

生成

impl Model {
    async fn _verify() {
        sqlx::query_as!(Self, "SELECT id, finish_at FROM task");
    }
}

这将导致sqlx查询_as宏在编译时验证结构体字段,需要设置DATABASE_URL,例如使用.env或sqlx离线数据。请参阅 docs.rs/sqlx

它还需要在项目中作为依赖项包含sqlx,例如对于Postgres,在Cargo.toml中需要

sqlx = { version = "0.6", features = ["runtime-tokio-rustls", "postgres"] }

请注意,sqlx和sea-orm列映射可能不完全兼容,此检查可能无法捕获一些列类型不匹配,您仍然有

#[sea_orm() 内支持的struct属性

  • table_name - 获取数据库表名
  • schema_name - 获取数据库模式名(用于Postgres)

#[verify()] 内支持的字段属性

  • type_override - 覆盖sqlx类型,如 强制不同的/自定义类型 所述,对于自定义枚举很有用。枚举需要用 #[derive(sqlx::Type)#[sqlx(type_name = "integer")] 进行注解
  • not_null - 强制列不可为空,例如对于db视图,sqlx可能获取了错误的可空性。
  • null - 与 not_null 相同,但强制列可为空

依赖项

~285–730KB
~17K SLoC