This commit is contained in:
Chris Tsang 2023-01-09 14:46:19 +08:00
parent f0634c2451
commit 5c93253877
4 changed files with 16 additions and 22 deletions

View File

@ -352,13 +352,8 @@ impl ActiveEnum {
#[automatically_derived]
impl sea_orm::TryGetable for #ident {
fn try_get(res: &sea_orm::QueryResult, pre: &str, col: &str) -> std::result::Result<Self, sea_orm::TryGetError> {
let value = <<Self as sea_orm::ActiveEnum>::Value as sea_orm::TryGetable>::try_get(res, pre, col)?;
<Self as sea_orm::ActiveEnum>::try_from_value(&value).map_err(sea_orm::TryGetError::DbErr)
}
fn try_get_by_index(res: &sea_orm::QueryResult, idx: usize) -> std::result::Result<Self, sea_orm::TryGetError> {
let value = <<Self as sea_orm::ActiveEnum>::Value as sea_orm::TryGetable>::try_get_by_index(res, idx)?;
fn try_get_by<I: sea_orm::ColIdx>(res: &sea_orm::QueryResult, idx: I) -> std::result::Result<Self, sea_orm::TryGetError> {
let value = <<Self as sea_orm::ActiveEnum>::Value as sea_orm::TryGetable>::try_get_by(res, idx)?;
<Self as sea_orm::ActiveEnum>::try_from_value(&value).map_err(sea_orm::TryGetError::DbErr)
}
}

View File

@ -61,6 +61,15 @@ impl From<TryGetError> for DbErr {
// QueryResult //
impl QueryResult {
/// Get a value from the query result with an ColIdx
pub fn try_get_by<T, I>(&self, index: I) -> Result<T, DbErr>
where
T: TryGetable,
I: ColIdx,
{
Ok(T::try_get_by(self, index)?)
}
/// Get a value from the query result with prefixed column name
pub fn try_get<T>(&self, pre: &str, col: &str) -> Result<T, DbErr>
where
@ -125,7 +134,7 @@ impl<T: TryGetable> TryGetable for Option<T> {
}
/// Column Index, used by [`TryGetable`]
pub trait ColIdx: std::fmt::Debug {
pub trait ColIdx: std::fmt::Debug + Copy {
#[cfg(feature = "sqlx-mysql")]
/// Type shenanigans
type SqlxMySqlIndex: sqlx::ColumnIndex<sqlx::mysql::MySqlRow>;

View File

@ -39,13 +39,8 @@ impl From<Events> for Value {
}
impl TryGetable for Events {
fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result<Self, TryGetError> {
let vec: Vec<String> = res.try_get(pre, col).map_err(TryGetError::DbErr)?;
Ok(Events(vec.into_iter().map(Event).collect()))
}
fn try_get_by_index(res: &QueryResult, idx: usize) -> Result<Self, TryGetError> {
let vec: Vec<String> = res.try_get_by_index(idx).map_err(TryGetError::DbErr)?;
fn try_get_by<I: sea_orm::ColIdx>(res: &QueryResult, idx: I) -> Result<Self, TryGetError> {
let vec: Vec<String> = res.try_get_by(idx).map_err(TryGetError::DbErr)?;
Ok(Events(vec.into_iter().map(Event).collect()))
}
}

View File

@ -25,13 +25,8 @@ impl From<StringVec> for Value {
}
impl TryGetable for StringVec {
fn try_get(res: &QueryResult, pre: &str, col: &str) -> Result<Self, TryGetError> {
let json_str: String = res.try_get(pre, col).map_err(TryGetError::DbErr)?;
serde_json::from_str(&json_str).map_err(|e| TryGetError::DbErr(DbErr::Json(e.to_string())))
}
fn try_get_by_index(res: &QueryResult, idx: usize) -> Result<Self, TryGetError> {
let json_str: String = res.try_get_by_index(idx).map_err(TryGetError::DbErr)?;
fn try_get_by<I: sea_orm::ColIdx>(res: &QueryResult, idx: I) -> Result<Self, TryGetError> {
let json_str: String = res.try_get_by(idx).map_err(TryGetError::DbErr)?;
serde_json::from_str(&json_str).map_err(|e| TryGetError::DbErr(DbErr::Json(e.to_string())))
}
}