1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use ToTokens;
use ;
use Enum;
/// Derive [`FromSql`] and [`ToSql`] for a Rust enum.
/// Represents a PostgreSQL enum as a Rust enum.
///
/// ## Example
///
/// ### migration
///
/// ```sql
/// CREATE TYPE animal AS ENUM (
/// 'chicken',
/// 'duck',
/// 'oca',
/// 'rabbit
/// );
/// ```
///
/// ### Rust enum
///
/// ```rust
/// # use benzina_derive as benzina;
/// # fn main() {}
///
/// use diesel::{
/// deserialize::FromSqlRow,
/// expression::AsExpression,
/// };
///
/// #[derive(Debug, Copy, Clone, AsExpression, FromSqlRow, benzina::Enum)]
/// #[diesel(sql_type = crate::schema::sql_types::Animal)]
/// #[benzina(
/// sql_type = crate::schema::sql_types::Animal,
/// rename_all = "snake_case"
/// )]
/// pub enum Animal {
/// Chicken,
/// Duck,
/// #[benzina(rename = "oca")]
/// Goose,
/// Rabbit,
/// }
///
/// pub mod schema {
/// // @generated automatically by Diesel CLI.
///
/// pub mod sql_types {
/// #[derive(diesel::query_builder::QueryId, Clone, diesel::sql_types::SqlType)]
/// #[diesel(postgres_type(name = "animal"))]
/// pub struct Animal;
/// }
/// }
/// ```
///
/// [`FromSql`]: https://docs.rs/diesel/latest/diesel/deserialize/trait.FromSql.html
/// [`ToSql`]: https://docs.rs/diesel/latest/diesel/serialize/trait.ToSql.html