@@ -7,7 +7,8 @@ use crate::json::value::{PathAndJson, ScopedJson};
7
7
use crate :: registry:: Registry ;
8
8
use crate :: render:: { Helper , RenderContext } ;
9
9
10
- use rhai:: { Dynamic , Engine , ImmutableString , Scope , AST } ;
10
+ use rhai:: ser:: to_dynamic;
11
+ use rhai:: { Dynamic , Engine , Scope , AST } ;
11
12
12
13
use serde_json:: value:: { Map , Number , Value as Json } ;
13
14
@@ -22,16 +23,13 @@ fn call_script_helper<'reg: 'rc, 'rc>(
22
23
engine : & Engine ,
23
24
script : & AST ,
24
25
) -> Result < Option < ScopedJson < ' reg , ' rc > > , RenderError > {
25
- let params: Dynamic = params
26
- . iter ( )
27
- . map ( |p| to_dynamic ( p. value ( ) ) )
28
- . collect :: < Vec < Dynamic > > ( )
29
- . into ( ) ;
30
- let hash: Dynamic = hash
31
- . iter ( )
32
- . map ( |( k, v) | ( ( * k) . to_owned ( ) , to_dynamic ( v. value ( ) ) ) )
33
- . collect :: < HashMap < String , Dynamic > > ( )
34
- . into ( ) ;
26
+ let params: Dynamic = to_dynamic ( params. iter ( ) . map ( |p| p. value ( ) ) . collect :: < Vec < & Json > > ( ) ) ?;
27
+
28
+ let hash: Dynamic = to_dynamic (
29
+ hash. iter ( )
30
+ . map ( |( k, v) | ( ( * k) . to_owned ( ) , v. value ( ) ) )
31
+ . collect :: < HashMap < String , & Json > > ( ) ,
32
+ ) ?;
35
33
36
34
let mut scope = Scope :: new ( ) ;
37
35
scope. push_dynamic ( "params" , params) ;
@@ -58,26 +56,6 @@ impl HelperDef for ScriptHelper {
58
56
}
59
57
}
60
58
61
- fn to_dynamic ( j : & Json ) -> Dynamic {
62
- match j {
63
- Json :: Number ( n) => Dynamic :: from ( n. clone ( ) ) ,
64
- Json :: Bool ( b) => Dynamic :: from ( * b) ,
65
- Json :: Null => Dynamic :: from ( ( ) ) ,
66
- Json :: String ( s) => Dynamic :: from ( s. clone ( ) ) ,
67
- Json :: Array ( ref v) => {
68
- let dyn_vec: Vec < Dynamic > = v. iter ( ) . map ( |i| to_dynamic ( i) ) . collect ( ) ;
69
- Dynamic :: from ( dyn_vec)
70
- }
71
- Json :: Object ( ref o) => {
72
- let dyn_map: HashMap < ImmutableString , Dynamic > = o
73
- . iter ( )
74
- . map ( |( k, v) | ( ImmutableString :: from ( k. as_str ( ) ) , to_dynamic ( v) ) )
75
- . collect ( ) ;
76
- Dynamic :: from ( dyn_map)
77
- }
78
- }
79
- }
80
-
81
59
fn to_json ( d : & Dynamic ) -> Json {
82
60
if let Ok ( s) = d. as_str ( ) {
83
61
return Json :: String ( s. to_owned ( ) ) ;
@@ -126,15 +104,15 @@ mod test {
126
104
[ { "name" : "tomcat" } , { "name" : "jetty" } ]
127
105
} ;
128
106
129
- let d0 = to_dynamic ( & j0) ;
107
+ let d0 = to_dynamic ( & j0) . unwrap ( ) ;
130
108
assert_eq ! ( "array" , d0. type_name( ) ) ;
131
109
132
110
let j1 = json ! ( {
133
111
"name" : "tomcat" ,
134
112
"value" : 4000 ,
135
113
} ) ;
136
114
137
- let d1 = to_dynamic ( & j1) ;
115
+ let d1 = to_dynamic ( & j1) . unwrap ( ) ;
138
116
assert_eq ! ( "map" , d1. type_name( ) ) ;
139
117
}
140
118
0 commit comments