use mool as db;
use mool::Model;
#[derive(Debug, Clone, Copy, PartialEq, Eq, db::SqlEnum)]
#[sql_enum(rename_all = "snake_case")]
enum PostStatus {
Draft,
InReview,
Published,
}
#[derive(Debug, Clone, db::Model)]
#[table(name = "posts")]
struct Post {
id: i64,
title: String,
#[column(sql_enum)]
status: PostStatus,
}
fn main() -> Result<(), db::SchemaLoadError> {
let posts = Post::table();
let plan = db::from(&posts)
.filter(posts.status.eq(db::val(PostStatus::Published)))
.all::<Post>()
.plan(db::queries::Dialect::Postgres)
.expect("valid enum query");
let schema = db::schema(db::Dialect::Postgres).model::<Post>().build()?;
assert!(plan.sql.contains("post.status = $1"));
assert!(schema.tables["posts"].constraints.iter().any(|constraint| {
matches!(
constraint,
db::Constraint::Check { expression, .. } if expression.contains("published")
)
}));
Ok(())
}