@ -157,6 +157,24 @@ pub trait FromDb {
fn from_db ( self ) -> Self ::Output ;
}
impl < T : FromDb > FromDb for Vec < T > {
type Output = Vec < T ::Output > ;
#[ allow(clippy::wrong_self_convention) ]
#[ inline(always) ]
fn from_db ( self ) -> Self ::Output {
self . into_iter ( ) . map ( crate ::db ::FromDb ::from_db ) . collect ( )
}
}
impl < T : FromDb > FromDb for Option < T > {
type Output = Option < T ::Output > ;
#[ allow(clippy::wrong_self_convention) ]
#[ inline(always) ]
fn from_db ( self ) -> Self ::Output {
self . map ( crate ::db ::FromDb ::from_db )
}
}
// For each struct eg. Cipher, we create a CipherDb inside a module named __$db_model (where $db is sqlite, mysql or postgresql),
// to implement the Diesel traits. We also provide methods to convert between them and the basic structs. Later, that module will be auto imported when using db_run!
#[ macro_export ]
@ -197,18 +215,9 @@ macro_rules! db_object {
impl crate ::db ::FromDb for [ < $name Db > ] {
type Output = super ::$name ;
#[ allow(clippy::wrong_self_convention) ]
#[ inline(always) ] fn from_db ( self ) -> Self ::Output { super ::$name { $( $field : self . $field , ) + } }
}
impl crate ::db ::FromDb for Vec < [ < $name Db > ] > {
type Output = Vec < super ::$name > ;
#[ inline(always) ] fn from_db ( self ) -> Self ::Output { self . into_iter ( ) . map ( crate ::db ::FromDb ::from_db ) . collect ( ) }
}
impl crate ::db ::FromDb for Option < [ < $name Db > ] > {
type Output = Option < super ::$name > ;
#[ inline(always) ] fn from_db ( self ) -> Self ::Output { self . map ( crate ::db ::FromDb ::from_db ) }
}
}
} ;
}