11use crate :: data:: { MigratorWithData , Options , SchemaDataManager } ;
22use anyhow:: bail;
3- use sea_orm:: { ConnectOptions , Database } ;
3+ use sea_orm:: ConnectOptions ;
44use sea_orm_migration:: { IntoSchemaManagerConnection , SchemaManager } ;
5- use std:: collections:: HashMap ;
6- use std:: time:: SystemTime ;
5+ use std:: { collections:: HashMap , time:: SystemTime } ;
76use trustify_module_storage:: service:: dispatch:: DispatchBackend ;
87
98#[ derive( Debug , Clone , Copy , PartialEq , Eq , Default , clap:: ValueEnum ) ]
@@ -14,14 +13,18 @@ pub enum Direction {
1413}
1514
1615pub struct Runner {
17- pub database_url : String ,
18- pub database_schema : Option < String > ,
16+ pub database : Database ,
1917 pub storage : DispatchBackend ,
2018 pub direction : Direction ,
2119 pub migrations : Vec < String > ,
2220 pub options : Options ,
2321}
2422
23+ pub enum Database {
24+ Config { url : String , schema : Option < String > } ,
25+ Provided ( sea_orm:: DatabaseConnection ) ,
26+ }
27+
2528impl Runner {
2629 pub async fn run < M : MigratorWithData > ( self ) -> anyhow:: Result < ( ) > {
2730 let migrations = M :: data_migrations ( )
@@ -38,15 +41,20 @@ impl Runner {
3841 running. push ( migration) ;
3942 }
4043
41- let schema = self . database_schema . unwrap_or_else ( || "public" . to_owned ( ) ) ;
44+ let database = match self . database {
45+ Database :: Config { url, schema } => {
46+ let schema = schema. unwrap_or_else ( || "public" . to_owned ( ) ) ;
4247
43- let connect_options = ConnectOptions :: new ( self . database_url )
44- . set_schema_search_path ( schema)
45- . to_owned ( ) ;
48+ let connect_options = ConnectOptions :: new ( url )
49+ . set_schema_search_path ( schema)
50+ . to_owned ( ) ;
4651
47- let db = Database :: connect ( connect_options) . await ?;
52+ sea_orm:: Database :: connect ( connect_options) . await ?
53+ }
54+ Database :: Provided ( database) => database,
55+ } ;
4856
49- let manager = SchemaManager :: new ( db . into_schema_manager_connection ( ) ) ;
57+ let manager = SchemaManager :: new ( database . into_schema_manager_connection ( ) ) ;
5058 let manager = SchemaDataManager :: new ( & manager, & self . storage , & self . options ) ;
5159
5260 for run in running {
0 commit comments