1- use std:: sync:: { Arc , LazyLock } ;
2- use tokio:: sync:: mpsc:: UnboundedSender ;
3- use tokio:: sync:: RwLock ;
4- use tokio:: task:: JoinHandle ;
1+ use super :: { ActorRunningError , System } ;
52use crate :: actor:: abstract_actor:: { Actor , Handler } ;
63use crate :: actor:: message:: Message ;
74use crate :: actor:: select:: ActorSelect ;
85use crate :: aliases:: ActorName ;
96use crate :: dependency_injection:: Inject ;
107use crate :: system:: builder:: SystemBuilder ;
11- use super :: { ActorRunningError , System } ;
8+ use std:: sync:: { Arc , LazyLock } ;
9+ use tokio:: sync:: mpsc:: UnboundedSender ;
10+ use tokio:: sync:: RwLock ;
11+ use tokio:: task:: JoinHandle ;
1212
13- static GLOBAL_SYSTEM : LazyLock < Arc < RwLock < System > > > = LazyLock :: new ( || {
14- Arc :: new ( RwLock :: new ( SystemBuilder :: new_global ( ) . build ( ) ) )
15- } ) ;
13+ static GLOBAL_SYSTEM : LazyLock < Arc < RwLock < System > > > =
14+ LazyLock :: new ( || Arc :: new ( RwLock :: new ( SystemBuilder :: new_global ( ) . build ( ) ) ) ) ;
1615
1716pub struct GlobalSystem { }
1817
@@ -43,7 +42,9 @@ impl GlobalSystem {
4342 R : From < ( ActorName , UnboundedSender < M > , A :: State ) > ,
4443 {
4544 let mut system = GLOBAL_SYSTEM . write ( ) . await ;
46- system. register_ref_with_state :: < A , M , R > ( actor_name, state) . await
45+ system
46+ . register_ref_with_state :: < A , M , R > ( actor_name, state)
47+ . await
4748 }
4849
4950 pub async fn spawn_actor < A , S > (
@@ -59,12 +60,20 @@ impl GlobalSystem {
5960 <A as Actor >:: Inject : Inject + Sized + Send ,
6061 {
6162 let mut system = GLOBAL_SYSTEM . write ( ) . await ;
62- system. spawn_actor :: < A , S > ( actor_name, actor, state, aggregator) . await
63+ system
64+ . spawn_actor :: < A , S > ( actor_name, actor, state, aggregator)
65+ . await
6366 }
6467
6568 pub async fn with ( & mut self , with : impl FnOnce ( & mut System ) ) -> Self {
6669 let mut system = GLOBAL_SYSTEM . write ( ) . await ;
6770 with ( & mut system) ;
6871 GlobalSystem { }
6972 }
70- }
73+
74+ pub async fn insert_service < T : Send + Sync + ' static > ( & mut self , data : T ) {
75+ let mut system = GLOBAL_SYSTEM . write ( ) . await ;
76+ system. insert_service ( data)
77+ }
78+ }
79+
0 commit comments