3个不稳定版本
0.2.0 | 2023年9月7日 |
---|---|
0.1.1 | 2023年9月6日 |
0.1.0 | 2023年9月6日 |
在过程宏中排名818
10KB
74 行
Diesel为FromSql
和ToSql
提供的枚举派生
此过程宏简化了为具有特定SqlType
的枚举生成Diesel FromSql
和ToSql
实例的过程。它旨在与Diesel和Postgres一起使用,利用ToString
和FromStr
特质作为转换的基类。此宏生成处理Rust和SQL之间枚举转换所需的所有样板代码。
目录
使用方法
要使用此过程宏,您需要将enum_diesel_macros
crate添加到项目的Cargo.toml
依赖项中。然后,您可以派生枚举所需实现。下面是使用FromToSql
宏的示例
#[derive(Debug, PartialEq, EnumString, Display, FromToSql)]
#[fromtosql(sql_type = MyEntityEnumSqlType)]
enum MyEntityEnum {
#[strum(serialize = "ONE")]
EnumOne,
#[strum(serialize = "TWO")]
EnumTwo,
}
请确保如示例所示导入所需的依赖项和模块。
示例
以下是如何使用FromToSql
宏的逐步示例,以生成针对您的枚举的Diesel FromSql
和ToSql
实例
- 使用Diesel的
SqlType
定义您的自定义SQL类型,并使用diesel属性进行注释
pub mod schema {
pub mod sql_types {
#[derive(diesel::sql_types::SqlType)]
#[diesel(postgres_type(name = "myentittyenumsqltype", schema = "myschema"))]
pub struct MyEntityEnumSqlType;
}
}
- 导入必要的Diesel和过程宏依赖项
#[derive(Debug, PartialEq, EnumString, Display, FromToSql)]
#[fromtosql(sql_type = MyEntityEnumSqlType)]
enum MyEntityEnum {
#[strum(serialize = "ONE")]
EnumOne,
#[strum(serialize = "TWO")]
EnumTwo,
}
- 现在,您可以使用
MyEntityEnum
枚举与Diesel查询无缝配合。
枚举和SqlTypes
使用此宏的关键是确保您已经为您定义了一个对应的 SqlType
。在这个例子中,MyEntityEnumSqlType
代表了 MyEntityEnum
枚举 的 SQL 类型。这个 SqlType
在 Diesel 架构中生成,并作为 MyEntityEnum
枚举 的伴随枚举。
确保您的 枚举 也实现了 FromStr
或 EnumString
特性,这对于从 SQL 值解析 枚举 是至关重要的。
依赖项
要使用此过程宏,请确保在您的 Cargo.toml
中包含以下依赖项:
[dependencies]
diesel = { version = "2.1", features = ["postgres"] }
strum = "0.25"
strum_macros = "0.25"
diesel-sqltype-enum-pg = "0.1.0"
依赖项
~3.5MB
~71K SLoC