Skip to content

Commit f165456

Browse files
committed
move the pg_enum macro to crate::sql, and add type in error message
1 parent c4ebc04 commit f165456

File tree

3 files changed

+36
-36
lines changed

3 files changed

+36
-36
lines changed

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ pub mod metrics;
4848
pub mod middleware;
4949
mod rate_limiter;
5050
pub mod schema;
51+
#[macro_use]
5152
pub mod sql;
5253
pub mod ssh;
5354
pub mod swirl;
5455
mod test_util;
55-
#[macro_use]
5656
pub mod util;
5757
pub mod worker;
5858

src/sql.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,38 @@ sql_function!(fn floor(x: Double) -> Integer);
1313
sql_function!(fn greatest<T: SingleValue>(x: T, y: T) -> T);
1414
sql_function!(fn least<T: SingleValue>(x: T, y: T) -> T);
1515
sql_function!(fn split_part(string: Text, delimiter: Text, n: Integer) -> Text);
16+
17+
#[macro_export]
18+
macro_rules! pg_enum {
19+
(
20+
$vis:vis enum $name:ident {
21+
$($item:ident = $int:expr,)*
22+
}
23+
) => {
24+
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, FromSqlRow, AsExpression)]
25+
#[diesel(sql_type = diesel::sql_types::Integer)]
26+
#[serde(rename_all = "snake_case")]
27+
#[repr(i32)]
28+
$vis enum $name {
29+
$($item = $int,)*
30+
}
31+
32+
impl diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::pg::Pg> for $name {
33+
fn from_sql(bytes: diesel::pg::PgValue<'_>) -> diesel::deserialize::Result<Self> {
34+
match <i32 as diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::pg::Pg>>::from_sql(bytes)? {
35+
$($int => Ok(Self::$item),)*
36+
n => Err(format!("unknown value for {}: {}", stringify!($name), n).into()),
37+
}
38+
}
39+
}
40+
41+
impl diesel::serialize::ToSql<diesel::sql_types::Integer, diesel::pg::Pg> for $name {
42+
fn to_sql(
43+
&self,
44+
out: &mut diesel::serialize::Output<'_, '_, diesel::pg::Pg>,
45+
) -> diesel::serialize::Result {
46+
diesel::serialize::ToSql::<diesel::sql_types::Integer, diesel::pg::Pg>::to_sql(&(*self as i32), &mut out.reborrow())
47+
}
48+
}
49+
}
50+
}

src/util.rs

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,3 @@ impl Maximums {
3232
}
3333
}
3434
}
35-
36-
#[macro_export]
37-
macro_rules! pg_enum {
38-
(
39-
$vis:vis enum $name:ident {
40-
$($item:ident = $int:expr,)*
41-
}
42-
) => {
43-
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize, FromSqlRow, AsExpression)]
44-
#[diesel(sql_type = diesel::sql_types::Integer)]
45-
#[serde(rename_all = "snake_case")]
46-
#[repr(i32)]
47-
$vis enum $name {
48-
$($item = $int,)*
49-
}
50-
51-
impl diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::pg::Pg> for $name {
52-
fn from_sql(bytes: diesel::pg::PgValue<'_>) -> diesel::deserialize::Result<Self> {
53-
match <i32 as diesel::deserialize::FromSql<diesel::sql_types::Integer, diesel::pg::Pg>>::from_sql(bytes)? {
54-
$($int => Ok(Self::$item),)*
55-
n => Err(format!("unknown value: {}", n).into()),
56-
}
57-
}
58-
}
59-
60-
impl diesel::serialize::ToSql<diesel::sql_types::Integer, diesel::pg::Pg> for $name {
61-
fn to_sql(
62-
&self,
63-
out: &mut diesel::serialize::Output<'_, '_, diesel::pg::Pg>,
64-
) -> diesel::serialize::Result {
65-
diesel::serialize::ToSql::<diesel::sql_types::Integer, diesel::pg::Pg>::to_sql(&(*self as i32), &mut out.reborrow())
66-
}
67-
}
68-
}
69-
}

0 commit comments

Comments
 (0)