@@ -7,7 +7,6 @@ use tokio::task::JoinHandle;
77use crate :: core:: domain:: { Domain , DomainRequest , DomainResponse } ;
88use crate :: core:: router:: Router ;
99use crate :: protocol:: route:: parse_route;
10- use crate :: storage:: traits:: KvStore ;
1110
1211// Keep the subscription sender type for compatibility
1312pub type SubSender = mpsc:: Sender < (
@@ -293,18 +292,39 @@ impl EngineHandle {
293292}
294293
295294/// Start the engine task with domain handlers
296- pub fn start_engine ( kv_store : Arc < dyn KvStore > ) -> EngineHandle {
297- let ( handle , _jh ) = start_engine_with_join ( kv_store ) ;
295+ pub fn start_engine ( ) -> EngineHandle {
296+ let ( _jh , handle ) = start_engine_with_join ( ) ;
298297 handle
299298}
300299
301- pub fn start_engine_with_join ( kv_store : Arc < dyn KvStore > ) -> ( EngineHandle , JoinHandle < ( ) > ) {
300+ pub fn start_engine_with_join ( ) -> ( JoinHandle < ( ) > , EngineHandle ) {
302301 let ( tx, mut rx) = mpsc:: channel :: < EngineCommand > ( 1024 ) ;
303302 let handle = EngineHandle :: new ( tx. clone ( ) ) ;
304303
305304 // Create domain handlers as Arc for shared ownership
306305 let mut domains: HashMap < & ' static str , Arc < dyn Domain > > = HashMap :: new ( ) ;
307306
307+ // Create a mock KV store for domains that need storage
308+ // TODO: Replace with proper storage backend
309+ use crate :: storage:: traits:: { KvStore , KvTransaction } ;
310+ use bytes:: Bytes ;
311+
312+ #[ derive( Clone ) ]
313+ struct MockStore ;
314+ impl KvStore for MockStore {
315+ fn put ( & self , _key : & [ u8 ] , _value : & [ u8 ] ) -> Result < ( ) , String > { Ok ( ( ) ) }
316+ fn get ( & self , _key : & [ u8 ] ) -> Result < Option < Bytes > , String > { Ok ( None ) }
317+ fn delete ( & self , _key : & [ u8 ] ) -> Result < ( ) , String > { Ok ( ( ) ) }
318+ fn put_batch ( & self , _writes : Vec < ( Vec < u8 > , Vec < u8 > ) > ) -> Result < ( ) , String > { Ok ( ( ) ) }
319+ fn delete_batch ( & self , _keys : Vec < Vec < u8 > > ) -> Result < ( ) , String > { Ok ( ( ) ) }
320+ fn scan ( & self , _start : & [ u8 ] , _end : & [ u8 ] ) -> Result < Vec < ( Bytes , Bytes ) > , String > { Ok ( vec ! [ ] ) }
321+ fn flush ( & self ) -> Result < ( ) , String > { Ok ( ( ) ) }
322+ fn begin_transaction ( & self ) -> Result < Box < dyn KvTransaction > , String > {
323+ Err ( "Transactions not supported in mock" . to_string ( ) )
324+ }
325+ }
326+ let kv_store = Arc :: new ( MockStore ) as Arc < dyn KvStore > ;
327+
308328 // Register all domains
309329 use crate :: core:: { control:: ControlDomain , kv:: KvDomain , lease:: LeaseDomain ,
310330 notice:: NoticeDomain , queue:: QueueDomain , rpc:: RpcDomain ,
@@ -313,11 +333,11 @@ pub fn start_engine_with_join(kv_store: Arc<dyn KvStore>) -> (EngineHandle, Join
313333 // Queue domain
314334 domains. insert ( "queue" , Arc :: new ( QueueDomain :: new ( ) ) ) ;
315335
316- // KV domain
317- domains. insert ( "kv" , Arc :: new ( KvDomain :: new ( ) ) ) ;
336+ // KV domain - needs storage
337+ domains. insert ( "kv" , Arc :: new ( KvDomain :: new ( Arc :: clone ( & kv_store ) ) ) ) ;
318338
319- // Stream domain
320- domains. insert ( "stream" , Arc :: new ( StreamDomain :: new ( ) ) ) ;
339+ // Stream domain - needs storage
340+ domains. insert ( "stream" , Arc :: new ( StreamDomain :: new ( Arc :: clone ( & kv_store ) ) ) ) ;
321341
322342 // Lease domain
323343 domains. insert ( "lease" , Arc :: new ( LeaseDomain :: new ( ) ) ) ;
@@ -374,7 +394,7 @@ pub fn start_engine_with_join(kv_store: Arc<dyn KvStore>) -> (EngineHandle, Join
374394 } ;
375395
376396 // Dispatch to domain
377- let response = domain. handle ( request, kv_store . clone ( ) ) . await ;
397+ let response = domain. handle ( request) . await ;
378398
379399 // Convert domain response to bytes and send response
380400 match response {
@@ -453,5 +473,5 @@ pub fn start_engine_with_join(kv_store: Arc<dyn KvStore>) -> (EngineHandle, Join
453473 }
454474 } ) ;
455475
456- ( handle , jh )
476+ ( jh , handle )
457477}
0 commit comments