@@ -425,3 +425,43 @@ impl ConfigurableDatabase for AnyDatabase {
425425impl_from ! ( ( ) , AnyDatabaseConfig , Memory , ) ;
426426impl_from ! ( SledDbConfiguration , AnyDatabaseConfig , Sled , #[ cfg( feature = "key-value-db" ) ] ) ;
427427impl_from ! ( SqliteDbConfiguration , AnyDatabaseConfig , Sqlite , #[ cfg( feature = "sqlite" ) ] ) ;
428+
429+ /// Type that implements [`DatabaseFactory`] that builds [`AnyDatabase`].
430+ pub enum AnyDatabaseFactory {
431+ /// Memory database factory
432+ Memory ( memory:: MemoryDatabaseFactory ) ,
433+ #[ cfg( feature = "key-value-db" ) ]
434+ #[ cfg_attr( docsrs, doc( cfg( feature = "key-value-db" ) ) ) ]
435+ /// Key-value database factory
436+ Sled ( sled:: Db ) ,
437+ #[ cfg( feature = "sqlite" ) ]
438+ #[ cfg_attr( docsrs, doc( cfg( feature = "sqlite" ) ) ) ]
439+ /// Sqlite databae factory
440+ Sqlite ( sqlite:: SqliteDatabaseFactory ) ,
441+ }
442+
443+ impl DatabaseFactory for AnyDatabaseFactory {
444+ type Inner = AnyDatabase ;
445+
446+ fn build_with_change (
447+ & self ,
448+ descriptor : ExtendedDescriptor ,
449+ change_descriptor : Option < ExtendedDescriptor > ,
450+ network : Network ,
451+ secp : & SecpCtx ,
452+ ) -> Result < Self :: Inner , Error > {
453+ match self {
454+ AnyDatabaseFactory :: Memory ( f) => f
455+ . build_with_change ( descriptor, change_descriptor, network, secp)
456+ . map ( Self :: Inner :: Memory ) ,
457+ #[ cfg( feature = "key-value-db" ) ]
458+ AnyDatabaseFactory :: Sled ( f) => f
459+ . build_with_change ( descriptor, change_descriptor, network, secp)
460+ . map ( Self :: Inner :: Sled ) ,
461+ #[ cfg( feature = "sqlite" ) ]
462+ AnyDatabaseFactory :: Sqlite ( f) => f
463+ . build_with_change ( descriptor, change_descriptor, network, secp)
464+ . map ( Self :: Inner :: Sqlite ) ,
465+ }
466+ }
467+ }
0 commit comments