@@ -7,29 +7,30 @@ use crate::{
77} ;
88
99#[ async_recursion]
10- pub async fn transition_tree < C , M , S , I , E > ( store : & S , parents : I , model : & M ) -> Result < Vec < M > , E >
10+ pub async fn transition_tree < C , M , S , I > (
11+ store : & S ,
12+ parents : I ,
13+ model : & M ,
14+ ) -> Result < Vec < M > , C :: Error >
1115where
1216 C : TypeConfig ,
1317 M : ModelT < C > + Sync ,
1418 S : StoreT < C , Model = M > + Sync ,
1519 S :: Model : ModelT < C > ,
1620 I : Iterator < Item = C :: ObjectId > + Send ,
17- E : core:: error:: Error + Send ,
18- E : From < <S as StoreT < C > >:: Error > ,
19- E : From < <M as ModelT < C > >:: Error > ,
2021{
2122 let mut models = vec ! [ ] ;
2223 for p in parents {
2324 let mut parent = store. get ( & p) . await ?;
2425 if parent. transition ( model) ? {
2526 if let Some ( grandparents) = parent. belongs_to ( ) {
26- let mut parent_models =
27- transition_tree :: < C , M , S , std :: vec :: IntoIter < < C as TypeConfig > :: ObjectId > , E > (
28- store ,
29- grandparents . into_iter ( ) ,
30- & parent ,
31- )
32- . await ?;
27+ let mut parent_models = transition_tree :: <
28+ C ,
29+ M ,
30+ S ,
31+ std :: vec :: IntoIter < < C as TypeConfig > :: ObjectId > ,
32+ > ( store , grandparents . into_iter ( ) , & parent )
33+ . await ?;
3334 if !parent_models. is_empty ( ) {
3435 models. append ( & mut parent_models) ;
3536 }
@@ -40,34 +41,30 @@ where
4041 Ok ( models)
4142}
4243
43- pub async fn default_model_execute < C : TypeConfig , M , S , E > (
44+ pub async fn default_model_execute < C : TypeConfig , M , S > (
4445 store : & S ,
4546 model : M ,
46- ) -> Result < Vec < ExecuteReference < C > > , E >
47+ ) -> Result < Vec < ExecuteReference < C > > , C :: Error >
4748where
4849 M : ModelT < C > + Sync ,
4950 S : StoreT < C , Model = M > + Sync ,
5051 S :: Model : ModelT < C > ,
51- E : core:: error:: Error + Send ,
52- E : From < <S as StoreT < C > >:: Error > ,
53- E : From < <M as ModelT < C > >:: Error > ,
5452{
5553 trace ! ( object_id=?model. object_id( ) , ?model, "handling" ) ;
5654 let Some ( belongs_to) = model. belongs_to ( ) else {
5755 trace ! ( object_id=?model. object_id( ) , "saving simple model" ) ;
58- return Ok ( store. save ( model) . await ? ) ;
56+ return store. save ( model) . await ;
5957 } ;
6058
6159 trace ! ( object_id=?model. object_id( ) , ?belongs_to, "transitioning tree" ) ;
62- let mut models =
63- transition_tree :: < C , M , S , std:: vec:: IntoIter < <C as TypeConfig >:: ObjectId > , E > (
64- store,
65- belongs_to. into_iter ( ) ,
66- & model,
67- )
68- . await ?;
60+ let mut models = transition_tree :: < C , M , S , std:: vec:: IntoIter < <C as TypeConfig >:: ObjectId > > (
61+ store,
62+ belongs_to. into_iter ( ) ,
63+ & model,
64+ )
65+ . await ?;
6966 models. push ( model) ;
70- Ok ( store. save_many ( models. into_iter ( ) ) . await ? )
67+ store. save_many ( models. into_iter ( ) ) . await
7168}
7269
7370#[ cfg( test) ]
@@ -88,7 +85,7 @@ mod tests {
8885 let child = MockModel :: new ( "child1" , 5 , Some ( vec ! [ "parent1" ] ) ) ;
8986
9087 let parents = vec ! [ MockObjectId ( "parent1" . to_string( ) ) ] ;
91- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
88+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
9289 & store,
9390 parents. into_iter ( ) ,
9491 & child,
@@ -112,7 +109,7 @@ mod tests {
112109 let child = MockModel :: new ( "child1" , 10 , Some ( vec ! [ "parent1" ] ) ) ;
113110
114111 let parents = vec ! [ MockObjectId ( "parent1" . to_string( ) ) ] ;
115- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
112+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
116113 & store,
117114 parents. into_iter ( ) ,
118115 & child,
@@ -145,7 +142,7 @@ mod tests {
145142 MockObjectId ( "parent1" . to_string( ) ) ,
146143 MockObjectId ( "parent2" . to_string( ) ) ,
147144 ] ;
148- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
145+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
149146 & store,
150147 parents. into_iter ( ) ,
151148 & child,
@@ -182,7 +179,7 @@ mod tests {
182179 let child = MockModel :: new ( "child" , 15 , Some ( vec ! [ "parent" ] ) ) ;
183180
184181 let parents = vec ! [ MockObjectId ( "parent" . to_string( ) ) ] ;
185- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
182+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
186183 & store,
187184 parents. into_iter ( ) ,
188185 & child,
@@ -211,7 +208,7 @@ mod tests {
211208 let child = MockModel :: new ( "child1" , 10 , None ) ;
212209 let parents: Vec < MockObjectId > = vec ! [ ] ;
213210
214- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
211+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
215212 & store,
216213 parents. into_iter ( ) ,
217214 & child,
@@ -230,7 +227,7 @@ mod tests {
230227 let child = MockModel :: new ( "child1" , 10 , Some ( vec ! [ "nonexistent" ] ) ) ;
231228 let parents = vec ! [ MockObjectId ( "nonexistent" . to_string( ) ) ] ;
232229
233- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
230+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
234231 & store,
235232 parents. into_iter ( ) ,
236233 & child,
@@ -252,8 +249,7 @@ mod tests {
252249 let model = MockModel :: new ( "simple" , 10 , None ) ;
253250
254251 let result =
255- default_model_execute :: < MockTypeConfig , MockModel , MockStore , MockError > ( & store, model)
256- . await ;
252+ default_model_execute :: < MockTypeConfig , MockModel , MockStore > ( & store, model) . await ;
257253
258254 assert ! ( result. is_ok( ) ) ;
259255 let references = result. unwrap ( ) ;
@@ -275,8 +271,7 @@ mod tests {
275271 let model = MockModel :: new ( "child" , 15 , Some ( vec ! [ "parent1" , "parent2" ] ) ) ;
276272
277273 let result =
278- default_model_execute :: < MockTypeConfig , MockModel , MockStore , MockError > ( & store, model)
279- . await ;
274+ default_model_execute :: < MockTypeConfig , MockModel , MockStore > ( & store, model) . await ;
280275
281276 assert ! ( result. is_ok( ) ) ;
282277 let references = result. unwrap ( ) ;
@@ -314,8 +309,7 @@ mod tests {
314309 let child = MockModel :: new ( "child" , 20 , Some ( vec ! [ "parent" ] ) ) ;
315310
316311 let result =
317- default_model_execute :: < MockTypeConfig , MockModel , MockStore , MockError > ( & store, child)
318- . await ;
312+ default_model_execute :: < MockTypeConfig , MockModel , MockStore > ( & store, child) . await ;
319313
320314 assert ! ( result. is_ok( ) ) ;
321315 let references = result. unwrap ( ) ;
@@ -351,8 +345,7 @@ mod tests {
351345 let model = MockModel :: new ( "child" , 15 , Some ( vec ! [ "parent1" , "parent2" ] ) ) ;
352346
353347 let result =
354- default_model_execute :: < MockTypeConfig , MockModel , MockStore , MockError > ( & store, model)
355- . await ;
348+ default_model_execute :: < MockTypeConfig , MockModel , MockStore > ( & store, model) . await ;
356349
357350 assert ! ( result. is_ok( ) ) ;
358351 let references = result. unwrap ( ) ;
@@ -382,8 +375,7 @@ mod tests {
382375 let model = MockModel :: new ( "child" , 15 , Some ( vec ! [ "nonexistent" ] ) ) ;
383376
384377 let result =
385- default_model_execute :: < MockTypeConfig , MockModel , MockStore , MockError > ( & store, model)
386- . await ;
378+ default_model_execute :: < MockTypeConfig , MockModel , MockStore > ( & store, model) . await ;
387379
388380 assert ! ( result. is_err( ) ) ;
389381 assert_eq ! (
@@ -406,7 +398,7 @@ mod tests {
406398
407399 // First transition
408400 let parents = vec ! [ MockObjectId ( "parent" . to_string( ) ) ] ;
409- let result1 = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
401+ let result1 = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
410402 & store,
411403 parents. clone ( ) . into_iter ( ) ,
412404 & child1,
@@ -424,7 +416,7 @@ mod tests {
424416 store. save ( current_parent) . await . unwrap ( ) ;
425417
426418 // Second transition should update the already-transitioned parent
427- let result2 = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
419+ let result2 = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
428420 & store,
429421 parents. clone ( ) . into_iter ( ) ,
430422 & child2,
@@ -457,7 +449,7 @@ mod tests {
457449 let leaf = MockModel :: new ( "leaf" , 100 , Some ( vec ! [ "level2" ] ) ) ;
458450
459451 let parents = vec ! [ MockObjectId ( "level2" . to_string( ) ) ] ;
460- let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ , MockError > (
452+ let result = transition_tree :: < MockTypeConfig , MockModel , MockStore , _ > (
461453 & store,
462454 parents. into_iter ( ) ,
463455 & leaf,
0 commit comments