From 3bf26a758a0ed6464ff48c08e2363155e1c82072 Mon Sep 17 00:00:00 2001 From: Muhannad Alrusayni Date: Fri, 17 Sep 2021 22:41:49 +0300 Subject: [PATCH] impl `TryFromU64` for tuples types --- src/executor/query.rs | 73 +++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/src/executor/query.rs b/src/executor/query.rs index 5bb1661b..ec8178a7 100644 --- a/src/executor/query.rs +++ b/src/executor/query.rs @@ -391,15 +391,27 @@ macro_rules! try_from_u64_err { } } }; -} -macro_rules! try_from_u64_tuple { - ( $type: ty ) => { - try_from_u64_err!(($type, $type)); - try_from_u64_err!(($type, $type, $type)); + ( $($gen_type: ident),* ) => { + impl<$( $gen_type, )*> TryFromU64 for ($( $gen_type, )*) + where + $( $gen_type: TryFromU64, )* + { + fn try_from_u64(_: u64) -> Result { + Err(DbErr::Exec(format!( + "{} cannot be converted from u64", + stringify!(($($gen_type,)*)) + ))) + } + } }; } +// impl TryFromU64 for tuples with generic types +try_from_u64_err!(A, B); +try_from_u64_err!(A, B, C); +try_from_u64_err!(A, B, C, D); + macro_rules! try_from_u64_numeric { ( $type: ty ) => { impl TryFromU64 for $type { @@ -414,7 +426,6 @@ macro_rules! try_from_u64_numeric { }) } } - try_from_u64_tuple!($type); }; } @@ -434,19 +445,49 @@ macro_rules! try_from_u64_string { Ok(n.to_string()) } } - try_from_u64_tuple!($type); }; } try_from_u64_string!(String); -macro_rules! try_from_u64_dummy { - ( $type: ty ) => { - try_from_u64_err!($type); - try_from_u64_err!(($type, $type)); - try_from_u64_err!(($type, $type, $type)); - }; -} - #[cfg(feature = "with-uuid")] -try_from_u64_dummy!(uuid::Uuid); +try_from_u64_err!(uuid::Uuid); + +// impl TryFromU64 for (A, B) +// where +// A: TryFromU64, +// B: TryFromU64, +// { +// fn try_from_u64(_: u64) -> Result { +// Err(DbErr::Exec( +// "(A, B) cannot be converted from u64".to_owned(), +// )) +// } +// } + +// impl TryFromU64 for (A, B, C) +// where +// A: TryFromU64, +// B: TryFromU64, +// C: TryFromU64, +// { +// fn try_from_u64(_: u64) -> Result { +// Err(DbErr::Exec( +// "(A, B, C) cannot be converted from u64".to_owned(), +// )) +// } +// } + +// impl TryFromU64 for (A, B, C, D) +// where +// A: TryFromU64, +// B: TryFromU64, +// C: TryFromU64, +// D: TryFromU64, +// { +// fn try_from_u64(_: u64) -> Result { +// Err(DbErr::Exec( +// "(A, B, C, D) cannot be converted from u64".to_owned(), +// )) +// } +// }