#枚举 #diesel #postgresql #过程宏 # #sql类型

diesel_sqltype_enum_pg

Diesel自动派生FromSqlToSql,用于由diesel生成的具有SqlType的枚举,并使用ToStringFromStr作为基类。仅支持Postgres绑定。

3个不稳定版本

0.2.0 2023年9月7日
0.1.1 2023年9月6日
0.1.0 2023年9月6日

过程宏中排名818

MIT许可协议

10KB
74

Build Release crates.io

API文档

Diesel为FromSqlToSql提供的枚举派生

此过程宏简化了为具有特定SqlType的枚举生成Diesel FromSqlToSql实例的过程。它旨在与Diesel和Postgres一起使用,利用ToStringFromStr特质作为转换的基类。此宏生成处理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 FromSqlToSql实例

  1. 使用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;
    }
}
  1. 导入必要的Diesel和过程宏依赖项
#[derive(Debug, PartialEq, EnumString, Display, FromToSql)]
#[fromtosql(sql_type = MyEntityEnumSqlType)]
enum MyEntityEnum {
    #[strum(serialize = "ONE")]
    EnumOne,
    #[strum(serialize = "TWO")]
    EnumTwo,
}
  1. 现在,您可以使用MyEntityEnum枚举与Diesel查询无缝配合。

枚举和SqlTypes

使用此宏的关键是确保您已经为您定义了一个对应的 SqlType。在这个例子中,MyEntityEnumSqlType 代表了 MyEntityEnum 枚举 的 SQL 类型。这个 SqlType 在 Diesel 架构中生成,并作为 MyEntityEnum 枚举 的伴随枚举。

确保您的 枚举 也实现了 FromStrEnumString 特性,这对于从 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